summaryrefslogtreecommitdiff
path: root/fs/pnode.h
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2025-08-19 12:22:03 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2025-09-15 21:26:44 -0400
commit75db7fd99075bf46f3bfeaa8f1aaa8b13b2590cf (patch)
tree3576689e6874a7773f06685c151997d9c0f08434 /fs/pnode.h
parentfc9d5efc4c620807af53d62285adc7d4bf9b9978 (diff)
downloadlinux-75db7fd99075bf46f3bfeaa8f1aaa8b13b2590cf.tar.gz
linux-75db7fd99075bf46f3bfeaa8f1aaa8b13b2590cf.tar.bz2
linux-75db7fd99075bf46f3bfeaa8f1aaa8b13b2590cf.zip
umount_tree(): take all victims out of propagation graph at once
For each removed mount we need to calculate where the slaves will end up. To avoid duplicating that work, do it for all mounts to be removed at once, taking the mounts themselves out of propagation graph as we go, then do all transfers; the duplicate work on finding destinations is avoided since if we run into a mount that already had destination found, we don't need to trace the rest of the way. That's guaranteed O(removed mounts) for finding destinations and removing from propagation graph and O(surviving mounts that have master removed) for transfers. Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/pnode.h')
-rw-r--r--fs/pnode.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/pnode.h b/fs/pnode.h
index 00ab153e3e9d..b029db225f33 100644
--- a/fs/pnode.h
+++ b/fs/pnode.h
@@ -42,6 +42,7 @@ static inline bool peers(const struct mount *m1, const struct mount *m2)
}
void change_mnt_propagation(struct mount *, int);
+void bulk_make_private(struct list_head *);
int propagate_mnt(struct mount *, struct mountpoint *, struct mount *,
struct hlist_head *);
void propagate_umount(struct list_head *);