Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimize: added a tail pointer in mntinfo_add_list #2593

Open
wants to merge 3 commits into
base: criu-dev
Choose a base branch
from

Conversation

ankushT369
Copy link

The mntinfo_add_list function previously traversed the entire linked list to find the tail node, resulting in a time complexity of O(n). This commit introduces a mntinfo_tail pointer to track the last node of the list, reducing the time complexity of insertion to O(1).

criu/mount.c Outdated Show resolved Hide resolved
@@ -90,6 +90,7 @@ struct mount_info {
int deleted_level;
struct list_head deleted_list;
struct mount_info *next;
struct mount_info *tail;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is better to user the list_head structure here.

Copy link
Author

@ankushT369 ankushT369 Feb 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean instead of mount_info *tail should I make it list_head tail

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean we can use the standard list here instead of reinventing a bicycle.

Copy link
Author

@ankushT369 ankushT369 Feb 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm sorry if this conversation is taking long.. the thing is the list_head is of different type in order to store the tail of a struct mount_info* shouldn't we use the struct mount_info* type?? because in the code mount.c (where I have changed code) the struct mount_info *mntinfo was the single linked list as it was told in the comment (file : mount.c, line : 110) and the struct mount_info *new has to traverse the struct mount_info *mntinfo (file : mount.c, line : 122) in order to find the tail of it ( if the *mntinfo wasn't empty) thats why I created a struct mount_info* tail in order to hold the pointer to tail. Any node of type struct mount_info* can have its tail stored in it so that it can fetch in O(1) time. I know its reinventing a bicycle but the thing is I can't understand how can I use the struct list_head cause there is a mismatch in type in order to hold the tail of anything of type struct mount_info*. Maybe I can wrong here by misunderstanding what you tried to say you can rectify me I am a beginner currently learning things.

criu/mount.c Outdated Show resolved Hide resolved
@ankushT369
Copy link
Author

ankushT369 commented Feb 8, 2025

@avagin What changes should I make to the code overall?

@avagin
Copy link
Member

avagin commented Feb 10, 2025

Here is just one logical change, so it should be just one patch. The subject line starts with the subsystem prefix. In this case, it is mnt:. The commit body should describe the change, reasons and its effects in details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants