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

mnt: Optimize mntinfo_add_list to O(1) using a tail pointer #2593

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

Conversation

ankushT369
Copy link

@ankushT369 ankushT369 commented Feb 7, 2025

This patch optimizes the mntinfo_add_list function from O(n) to O(1) by introducing a tail pointer (tailbuffer) to track the end of the linked list. Previously, adding a new mount_info node required traversing the entire list to find the tail, which was inefficient for large lists.

Changes:

  1. Added a struct list_head tail to the mount_info struct to maintain the tail pointer.
  2. Introduced a global tailbuffer to store the current tail of the list.
  3. Modified mntinfo_add_list to use tailbuffer for O(1) insertion at the tail.
  4. Updated mntinfo_add_list_before to initialize the tail pointer and maintain consistency when adding nodes at the head.

The optimization significantly improves performance for operations involving large lists of mount information. This change also ensures that the list remains consistent and correctly updated during insertions.

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.

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.

@ankushT369
Copy link
Author

ok got it I am gonna fix this!!

@ankushT369 ankushT369 changed the title optimize: added a tail pointer in mntinfo_add_list mnt: Optimize mntinfo_add_list to O(1) using a tail pointer Feb 19, 2025
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