On 17/4/19 5:31 PM, David Sterba wrote:
On Tue, Apr 16, 2019 at 06:01:58AM +0800, Anand Jain wrote:
On 16/4/19 3:01 am, David Sterba wrote:
On Fri, Apr 12, 2019 at 04:02:53PM +0800, Anand Jain wrote:
In an attempt to stream line the property and extended attribute set here
are the few cleanup patches.
1/6 to 3/6 are mostly non functional cleanups (except for the conversion
to non static function in 3/6) and can be merged together.
4/6 removes the readonly root check in btrfs_setxattr() more details in
the change log.
5/6 as now we have btrfs_setxattr() and btrfs_setxattr_trans() for the
threads with transaction and without transaction respectively, so this
patch uses them.
6/6 as 5/6 as diverted the threads with transaction to btrfs_setxattr(),
now btrfs_setxattr_trans() can drop the trans arg.
Anand Jain (6):
btrfs: rename btrfs_setxattr to btrfs_setxattr_trans
btrfs: rename do_setxattr to btrfs_setxattr
btrfs: declare btrfs_setxattr as a non static function
btrfs: remove redundant readonly root check in btrfs_setxattr_trans
btrfs: split thread with trans to use btrfs_setxattr
btrfs: cleanup btrfs_setxattr_trans drop trans arg
Looks good to me, thanks. The result is very close to what the previous
patchset did. Patchset will go to for-next soon.
Thanks. On top of these, I am writing patches to merge
start_transactions in btrfs_ioctl_setflags().
My current idea how to change btrfs_ioctl_setflags is like that (but I
haven't prototyped it so it might not work):
- don't change binode->flags directly, but do all flag updates on a
temporary variable
- if a property needs to be changed, do validation first, then start
transaction and pass it to the property handler
In btrfs_ioctl_setflags() we don't need the validate() at all, as the
the property strings are hard coded with in the kernel or already
verified during the mount -o option (fs_info->compress_type).
So only place where we need the validate is
btrfs_xattr_handler_set_prop().
Thanks, Anand
- in the finalizing code, start a transaction unless it's been started
already, apply the iflags and end transaction
This means there are up to 4 starting points of transaction, but the
property validation should never fail between start/end region. There
are other potential failures due to ENOMEM or ENOSPC, but that's the
general set of errors we can't avoid.