• Misono Tomohiro's avatar
    btrfs: Allow rmdir(2) to delete an empty subvolume · a79a464d
    Misono Tomohiro authored
    Change the behavior of rmdir(2) and allow it to delete an empty
    subvolume by using btrfs_delete_subvolume() which is used by
    btrfs_ioctl_snap_destroy().
    
    This is a change in behaviour and has been requested by users. Deleting
    the subvolume by ioctl requires root permissions while the rmdir way
    does works with standard tools and syscalls for all users that can
    access the subvolume.
    
    The main usecase is to allow 'rm -rf /path/with/subvols' to simply work.
    We were not able to find any nasty usability surprises, the intention is
    to do the destructive rm. Without allowing rmdir, this would have to be
    followed by the ioctl subvolume deletion, which is more of an annoyance.
    
    Implementation details:
    
    The required lock for @dir and inode of @dentry is already acquired in
    vfs layer.
    
    We need some check before deleting a subvolume. Permission check is done
    in vfs layer, emptiness check is in btrfs_rmdir() and additional check
    (i.e. neither the subvolume is a default subvolume nor send is in progress)
    is in btrfs_delete_subvolume().
    
    Note that in btrfs_ioctl_snap_destroy(), d_delete() is called after
    btrfs_delete_subvolume(). For rmdir(2), d_delete() is called in vfs
    layer later.
    Tested-by: default avatarGoffredo Baroncelli <kreijack@inwind.it>
    Signed-off-by: default avatarTomohiro Misono <misono.tomohiro@jp.fujitsu.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    [ enhance changelog ]
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a79a464d
inode.c 291 KB