From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: Al Viro <viro@ZenIV.linux.org.uk>, <dsterba@suse.cz>,
<linux-btrfs@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH RESEND v4 6/8] vfs: Add get_vfsmount_sb() function to get vfsmount from a given sb.
Date: Fri, 30 Jan 2015 09:11:26 +0800 [thread overview]
Message-ID: <54CADA3E.6050306@cn.fujitsu.com> (raw)
In-Reply-To: <20150129152347.GE29656@ZenIV.linux.org.uk>
-------- Original Message --------
Subject: 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>
To: <dsterba@suse.cz>, Qu Wenruo <quwenruo@cn.fujitsu.com>,
<linux-btrfs@vger.kernel.org>, linux-fsdevel <linux-fsdevel@vger.kernel.org>
Date: 2015年01月29日 23:23
> 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:
>>> +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?
In sysfs interface handler, we don't have struct file or vfsmount to do
the mnt_want_write* protection,
so this function is introduced to get a vfsmount and do the protection.
> 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...
This is the problem I didn't find a good way to avoid.
If using the function, it will always use the first(or last?) vfsmount
of the filesystem.
For 1 to 1 match case, it's OK, but if one device is mounted on multiple
mount points,
it will delay the umount of that mount point. But we only need to keep
at least one rw mount point exists.
> 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?
For the mounted ro case, that's not a problem, since if one instance is
mounted ro,
other instances are also mounted ro, so that's not a problem.
>
> 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()?
Did you mean change the function name and it's parameter to
sb_want_write(sb) and sb_drop_write(sb).
That looks much better.
But I'm a little worried about just using sb_start_write() and
s_readonly_remount/s_flags to do the protection,
will it be enough?
Thanks,
Qu
>
>
> 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().
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-01-30 1:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1422498281-20493-1-git-send-email-quwenruo@cn.fujitsu.com>
2015-01-29 2:24 ` [PATCH RESEND v4 6/8] vfs: Add get_vfsmount_sb() function to get vfsmount from a given sb Qu Wenruo
2015-01-29 12:37 ` David Sterba
2015-01-29 15:23 ` Al Viro
2015-01-30 1:11 ` Qu Wenruo [this message]
2015-01-30 2:09 ` Al Viro
2015-01-30 2:20 ` Qu Wenruo
2015-01-30 0:52 ` Miao Xie
2015-01-30 1:44 ` Qu Wenruo
2015-01-30 2:02 ` Qu Wenruo
2015-01-30 3:22 ` Miao Xie
2015-01-30 3:30 ` Qu Wenruo
2015-01-30 2:14 ` Al Viro
2015-01-30 4:14 ` Miao Xie
2015-01-30 4:37 ` Al Viro
2015-01-30 5:34 ` Miao Xie
2015-01-30 6:15 ` Al Viro
2015-01-30 5:30 ` Qu Wenruo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54CADA3E.6050306@cn.fujitsu.com \
--to=quwenruo@cn.fujitsu.com \
--cc=dsterba@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).