Skip to contentSkip to conversation

vfs: add an interface to do some preparation for umount

RFC PATCH In review Miao Xie 2 participants 3 messages Mar 22, 2012

Subsystems (2)
lore
Share & tools
lore

Miao Xie

author
#0 lore raw

RFC PATCH 1/2 vfs: add an interface to do some preparation for umount

Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.

---
 fs/namespace.c     |    2 ++
 include/linux/fs.h |    1 +
 2 files changed, 3 insertions(+), 0 deletions(-)
fs/namespace.c +2 -0
index e608199..f5c1cce 100644
@@ -1173,6 +1173,8 @@ static int do_umount(struct mount *mnt, int flags)
 	}
 	br_write_unlock(vfsmount_lock);
 	up_write(&namespace_sem);
+	if (!retval && sb->s_op->umount_prepare)
+		sb->s_op->umount_prepare(sb);
 	release_mounts(&umount_list);
 	return retval;
 }
include/linux/fs.h +1 -0
index 69cd5bb..6b9657c 100644
@@ -1686,6 +1686,7 @@ struct super_operations {
 	int (*statfs) (struct dentry *, struct kstatfs *);
 	int (*remount_fs) (struct super_block *, int *, char *);
 	void (*umount_begin) (struct super_block *);
+	void (*umount_prepare) (struct super_block *);
 
 	int (*show_options)(struct seq_file *, struct dentry *);
 	int (*show_devname)(struct seq_file *, struct dentry *);
Signature · 1 line
1.7.6.5
maintainer
#1 lore raw
Quoted 4 lines · Miao Xie

Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.

NAK. First of all, fs might be in active use _after_ umount. man 8 umount, see umount -l there. Moreover, the same superblock may very well be mounted more than once, so umount of an individual mountpoint would better not do anything nasty to users of other ones.

IOW, this is completely misguided - you are dealing with whatever problem it is at least two layers above the right one.

1) vfsmount may be detached from mount trees but remain in active use.
2) there may be many vfsmounts over given struct super_block.

Doing things earlier than the final mntput() runs afoul of (1); doing them before the final deactivate_locked_super() runs afoul of (2).

What the hell is that thread doing that needs ->s_umount for serialization and why is it doing that?

author
#2 lore raw
Quoted 14 lines · Al Viro
Quoted 4 lines · Miao Xie

Some file systems can do some works in the background by kthreads, we'd better stop those works before we umount the file system, or it is easy to introduce some problems. So we add an interface that is used to do some preparation for umount.

NAK. First of all, fs might be in active use _after_ umount. man 8 umount, see umount -l there. Moreover, the same superblock may very well be mounted more than once, so umount of an individual mountpoint would better not do anything nasty to users of other ones.

IOW, this is completely misguided - you are dealing with whatever problem it is at least two layers above the right one.

Quoted 8 lines

1) vfsmount may be detached from mount trees but remain in active use.
2) there may be many vfsmounts over given struct super_block.

Doing things earlier than the final mntput() runs afoul of (1); doing them before the final deactivate_locked_super() runs afoul of (2).

What the hell is that thread doing that needs ->s_umount for serialization and why is it doing that?

AFAIK, acquiring ->s_umount is to avoid the filesystem going from r/w to r/o.

This is patch is slapdash, I will find another way to deal with the bug we found.

Thanks for your review.

Miao