* R: Re: [PATCH v2 5/5] Btrfs: Add BTRFS_IOC_SUBVOL_GETFLAGS/SETFLAGS ioctl
@ 2010-12-10 8:18 Goffredo Baroncelli <kreijack@libero.it>
0 siblings, 0 replies; only message in thread
From: Goffredo Baroncelli <kreijack@libero.it> @ 2010-12-10 8:18 UTC (permalink / raw)
To: lizf; +Cc: linux-btrfs
>----Messaggio originale----
>Da: lizf@cn.fujitsu.com
>Data: 10/12/2010 8.12
>A: <kreijack@libero.it>
>Cc: <linux-btrfs@vger.kernel.org>
>Ogg: Re: [PATCH v2 5/5] Btrfs: Add BTRFS_IOC_SUBVOL_GETFLAGS/SETFLAGS ioctl
>
>Goffredo Baroncelli wrote:
>> Hi Li,
>>
>> On Thursday, 09 December, 2010, Li Zefan wrote:
>>> This allows us to set a snapshot or a subvolume readonly or writable
>>> on the fly.
>>>
>>> Usage:
>>>
>>> Set BTRFS_SUBVOL_RDONLY of btrfs_ioctl_vol_arg_v2->flags, and then
>>> call ioctl(BTRFS_IOCTL_SUBVOL_SETFLAGS);
[...]
>>> + /* nothing to do */
>>> + if (!!(flags & BTRFS_SUBVOL_RDONLY) == root->readonly)
>>> + goto out_unlock;
>>
>> This is only an aesthetic comment: I prefer a simpler style like
>>
>> if ((flags & BTRFS_SUBVOL_RDONLY) && root->readonly)
>> goto out_unlock;
>>
>
>They are not equivalent. The former checks if the flags and the
>root both have readonly bit set or cleared.
Right, my fault
>> But I know that every body has its style :-)
>>
>>> +
>>> + root_flags = btrfs_root_flags(&root->root_item);
>>> + if (flags & BTRFS_SUBVOL_RDONLY)
>>> + btrfs_set_root_flags(&root->root_item,
>>> + root_flags | BTRFS_ROOT_SNAP_RDONLY);
>>> + else
>>> + btrfs_set_root_flags(&root->root_item,
>>> + root_flags & ~BTRFS_ROOT_SNAP_RDONLY);
>>> + root->readonly = !root->readonly;
>>
>> I double checked this line. But if I read the code correctly I think that
the
>> line above is wrong: the field "root->readonly" is flipped regardless the
>> value of the flags passed by the user.
>>
>
>Yep, that's because if we don't need to flip it, we've already exited early.
>
>Note, there's only one flag.
Yes, it is true. However I strongly suggest to avoid that. If someone adds
another flag this may miss...
Obviously if we get rid of the root->readonly we solve at the root the problem
:)
>> Moreover I have another question: why internally the flags is
>> BTRFS_ROOT_SNAP_RDONLY, instead in user space the flag is
BTRFS_SUBVOL_RDONLY
>> ?
>>
>
>That's my carelessness..
>
>> I suggest to
>> - rename BTRFS_SUBVOL_RDONLY in BTRFS_SUBVOL_CREATE_SNAP_RDONLY (like
>> BTRFS_SUBVOL_CREATE_SNAP_ASYNC)
>> - rename BTRFS_ROOT_SNAP_RDONLY in BTRFS_ROOT_FLAGS_RDONLY and use both
in
>> userspace and in kernel space this flag. I suggested to remove SNAP
because
>> the flag make sense also for a "standard" subvolume.
>>
>
>I'd prefer not to mix flags for root_item flags and vol ioctl flags.
>
>And CREATE_RDONLY and CREATE_ASYNC can also be valid for subvolumes too.
>Support for async subvolume creation is already there, just lack of an
>user interface. So I've changed _CREATE_SNAP_ASYNC to _CREATE_ASYNC
>in the patch I sent just now.
I fully gree
>--
>To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2010-12-10 8:18 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-10 8:18 R: Re: [PATCH v2 5/5] Btrfs: Add BTRFS_IOC_SUBVOL_GETFLAGS/SETFLAGS ioctl Goffredo Baroncelli <kreijack@libero.it>
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.