btrfs: add ioctls to query/change feature bits online
authorJeff Mahoney <jeffm@suse.com>
Fri, 15 Nov 2013 20:33:55 +0000 (15:33 -0500)
committerChris Mason <clm@fb.com>
Tue, 28 Jan 2014 21:19:23 +0000 (13:19 -0800)
commit2eaa055fab4e3127c9f572fda1b710cbb2acdf1c
tree43ec0254e30315288d03196054ff3fff534ed06c
parent9e5ac13acbb9e806a54f131432501bf462248c35
btrfs: add ioctls to query/change feature bits online

There are some feature bits that require no offline setup and can
be enabled online. I've only reviewed extended irefs, but there will
probably be more.

We introduce three new ioctls:
- BTRFS_IOC_GET_SUPPORTED_FEATURES: query the kernel for supported features.
- BTRFS_IOC_GET_FEATURES: query the kernel for enabled features on a per-fs
  basis, as well as querying for which features are changeable with mounted.
- BTRFS_IOC_SET_FEATURES: change features on a per-fs basis.

We introduce two new masks per feature set (_SAFE_SET and _SAFE_CLEAR) that
allow us to define which features are safe to change at runtime.

The failure modes for BTRFS_IOC_SET_FEATURES are as follows:
- Enabling a completely unsupported feature: warns and returns -ENOTSUPP
- Enabling a feature that can only be done offline: warns and returns -EPERM

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ctree.h
fs/btrfs/ioctl.c
include/uapi/linux/btrfs.h