Thread (33 messages) 33 messages, 4 authors, 2015-01-30

Re: [PATCH RESEND v4 6/8] vfs: Add get_vfsmount_sb() function to get vfsmount from a given sb.

From: Al Viro <viro@ZenIV.linux.org.uk>
Date: 2015-01-29 15:23:50
Also in: linux-fsdevel

On Thu, Jan 29, 2015 at 01:37:58PM +0100, David Sterba wrote:
Adding Al Viro into CC

On Thu, Jan 29, 2015 at 10:24:39AM +0800, Qu Wenruo wrote:
quoted
+struct vfsmount *get_vfsmount_sb(struct super_block *sb)
+{
+	struct vfsmount *ret_vfs = NULL;
+	struct mount *mnt;
+	int ret = 0;
+
+	lock_mount_hash();
+	if (list_empty(&sb->s_mounts))
+		goto out;
+	mnt = list_entry(sb->s_mounts.next, struct mount, mnt_instance);
from include/linux/fs.h:

struct super_block {
...
	struct list_head        s_mounts;       /* list of mounts; _not_ for fs use */
...
};

I hear a storm in the distance coming our direction ... so I'll
preemptively NAK this change.
Could you explain what the devil is that for?  The primitive looks rather
bogus - if nothing else, it includes "make random instance of the filesystem
in someone's namespace appear busy to umount", which doesn't look like a
part of useful interface...  The only piece of context I'd been able to find
was something vague about sysfs-inflicted operations and wanting to use
mnt_want_write() but having nothing to pass it; BTW, what if the (random)
instance you run into happens to mounted r/o?

Assuming that your superblock is guaranteed to stay alive and usable for
whatever work you are trying to do, what's wrong with sb_want_write()?  

If it's _not_ guaranteed to stay so, and this is what you are trying to
solve, you are doing that at the wrong level - just take sysfs entry
removals earlier in shutdown process and be done with that.  Beginning of
close_ctree() would probably be early enough to be safe, but if that's
not enough, you can take it into the beginning of btrfs_kill_super().
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help