From: Harald Hoyer <harald@redhat.com>
To: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] btrfs: allow mounting btrfs subvolumes with different ro/rw options
Date: Sat, 14 Sep 2013 13:26:22 +0200 [thread overview]
Message-ID: <523447DE.1080507@redhat.com> (raw)
In-Reply-To: <52246E91.2050500@redhat.com>
On 09/02/2013 12:55 PM, Harald Hoyer wrote:
> On 06/18/2013 05:29 PM, harald@redhat.com wrote:
>> From: Harald Hoyer <harald@redhat.com>
>>
>> Given the following /etc/fstab entries:
>>
>> /dev/sda3 /mnt/foo btrfs subvol=foo,ro 0
>> /dev/sda3 /mnt/bar btrfs subvol=bar,rw 0
>>
>> you can't issue:
>>
>> $ mount /mnt/foo
>> $ mount /mnt/bar
>>
>> You would have to do:
>>
>> $ mount /mnt/foo
>> $ mount -o remount,rw /mnt/foo
>> $ mount --bind -o remount,ro /mnt/foo
>> $ mount /bar
>>
>> or
>>
>> $ mount /mnt/bar
>> $ mount --rw /mnt/foo
>> $ mount --bind -o remount,ro /mnt/foo
>>
>> With this patch you can do
>>
>> $ mount /mnt/foo
>> $ mount /mnt/bar
>>
>> $ cat /proc/self/mountinfo
>> 49 33 0:41 /foo /mnt/foo ro,relatime shared:36 - btrfs /dev/sda3 rw,ssd,space_cache
>> 87 33 0:41 /bar /mnt/bar rw,relatime shared:74 - btrfs /dev/sda3 rw,ssd,space_cache
>> ---
>> fs/btrfs/super.c | 22 ++++++++++++++++++++++
>> 1 file changed, 22 insertions(+)
>>
>> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
>> index f0857e0..80ed3e2 100644
>> --- a/fs/btrfs/super.c
>> +++ b/fs/btrfs/super.c
>> @@ -64,6 +64,8 @@
>> static const struct super_operations btrfs_super_ops;
>> static struct file_system_type btrfs_fs_type;
>>
>> +static int btrfs_remount(struct super_block *sb, int *flags, char *data);
>> +
>> static const char *btrfs_decode_error(int errno)
>> {
>> char *errstr = "unknown";
>> @@ -1036,6 +1038,26 @@ static struct dentry *mount_subvol(const char *subvol_name, int flags,
>> mnt = vfs_kern_mount(&btrfs_fs_type, flags, device_name,
>> newargs);
>> kfree(newargs);
>> +
>> + if (PTR_RET(mnt) == -EBUSY) {
>> + if (flags & MS_RDONLY) {
>> + mnt = vfs_kern_mount(&btrfs_fs_type, flags & ~MS_RDONLY, device_name,
>> + newargs);
>> + } else {
>> + int r;
>> + mnt = vfs_kern_mount(&btrfs_fs_type, flags | MS_RDONLY, device_name,
>> + newargs);
>> + if (IS_ERR(mnt))
>> + return ERR_CAST(mnt);
>> +
>> + r = btrfs_remount(mnt->mnt_sb, &flags, NULL);
>> + if (r < 0) {
>> + /* FIXME: release vfsmount mnt ??*/
>> + return ERR_PTR(r);
>> + }
>> + }
>> + }
>> +
>> if (IS_ERR(mnt))
>> return ERR_CAST(mnt);
>>
>>
>
> Any comments?
>
Not even a "no, we don't want that" ?
next prev parent reply other threads:[~2013-09-14 11:26 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-18 15:29 [PATCH] btrfs: allow mounting btrfs subvolumes with different ro/rw options harald
2013-09-02 10:55 ` Harald Hoyer
2013-09-14 11:26 ` Harald Hoyer [this message]
2013-11-18 10:53 ` David Sterba
2013-11-19 10:36 ` Harald Hoyer
-- strict thread matches above, loose matches on Subject: below --
2013-11-19 10:36 harald
2013-11-19 14:35 ` Chris Mason
2014-04-03 17:45 ` David Sterba
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=523447DE.1080507@redhat.com \
--to=harald@redhat.com \
--cc=linux-btrfs@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.