]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: allow defrag on a file opened read-only that has rw permissions
authorAdam Borowski <kilobyte@angband.pl>
Tue, 17 Jul 2018 22:08:59 +0000 (00:08 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 6 Aug 2018 11:12:58 +0000 (13:12 +0200)
commit7008986eef1556d48d78c95ccfd3c7c142bdc0ca
treedb5a02bf91b2df5f0d38140a648093783b75cdf0
parent9b99313f6451606c8548617cdf0a6389874ba4c1
btrfs: allow defrag on a file opened read-only that has rw permissions

Requiring a read-write descriptor conflicts both ways with exec,
returning ETXTBSY whenever you try to defrag a program that's currently
being run, or causing intermittent exec failures on a live system being
defragged.

As defrag doesn't change the file's contents in any way, there's no
reason to consider it a rw operation.  Thus, let's check only whether
the file could have been opened rw.  Such access control is still needed
as currently defrag can use extra disk space, and might trigger bugs.

We return EINVAL when the request is invalid; here it's ok but merely
the user has insufficient privileges.  Thus, the EPERM return value
reflects the error better -- as discussed in the identical case for
dedupe.

According to codesearch.debian.net, no userspace program distinguishes
these values beyond strerror().

Signed-off-by: Adam Borowski <kilobyte@angband.pl>
Reviewed-by: David Sterba <dsterba@suse.com>
[ fold the EPERM patch from Adam ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ioctl.c