drivers: btrfs: Allow unprivileged user to delete subvolumes
drivers: btrfs: Allow unprivileged user to delete subvolumes

In btrfs, subvolume can be deleted by IOC_SNAP_DESTROY ioctl but there
is one catch: unprivileged IOC_SNAP_DESTROY call is restricted by default.

This is because IOC_SNAP_DESTROY only performs permission checks on
the top directory(subvolume) and unprivileged user might delete dirs/files
which cannot be deleted otherwise. This restriction can be relaxed if
user_subvol_rm_allowed mount option is used.

Although the above ioctl had been the only way to delete a subvolume,
btrfs now allows deletion of subvolume just like regular directory
(i.e. rmdir sycall) since kernel 4.18.

So if we fail to cleanup subvolume in subvolDelete(), just fallback to
system.EnsureRmoveall() to try to cleanup subvolumes again.
(Note: quota needs privilege, so if quota is enabled we do not fallback)

This fix will allow non-privileged container works with btrfs backend.

Signed-off-by: Misono Tomohiro <05e1434f8972a34a0377619a01476e36c5c3be18@gmail.com>

rhatdan/storage,rhatdan/storage,containers/storage,containers/storage,containers/storage,rhatdan/storage