diff options
| -rw-r--r-- | fs/btrfs/ioctl.h | 14 | ||||
| -rw-r--r-- | fs/btrfs/super.c | 3 | ||||
| -rw-r--r-- | fs/btrfs/volumes.c | 1 |
3 files changed, 11 insertions, 7 deletions
diff --git a/fs/btrfs/ioctl.h b/fs/btrfs/ioctl.h index 78049ea208db..b320b103fa13 100644 --- a/fs/btrfs/ioctl.h +++ b/fs/btrfs/ioctl.h | |||
| @@ -22,13 +22,20 @@ | |||
| 22 | 22 | ||
| 23 | #define BTRFS_IOCTL_MAGIC 0x94 | 23 | #define BTRFS_IOCTL_MAGIC 0x94 |
| 24 | #define BTRFS_VOL_NAME_MAX 255 | 24 | #define BTRFS_VOL_NAME_MAX 255 |
| 25 | #define BTRFS_PATH_NAME_MAX 3072 | 25 | #define BTRFS_PATH_NAME_MAX 4087 |
| 26 | 26 | ||
| 27 | /* this should be 4k */ | ||
| 27 | struct btrfs_ioctl_vol_args { | 28 | struct btrfs_ioctl_vol_args { |
| 28 | __s64 fd; | 29 | __s64 fd; |
| 29 | char name[BTRFS_PATH_NAME_MAX + 1]; | 30 | char name[BTRFS_PATH_NAME_MAX + 1]; |
| 30 | }; | 31 | }; |
| 31 | 32 | ||
| 33 | struct btrfs_ioctl_clone_range_args { | ||
| 34 | __s64 src_fd; | ||
| 35 | __u64 src_offset, src_length; | ||
| 36 | __u64 dest_offset; | ||
| 37 | }; | ||
| 38 | |||
| 32 | #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \ | 39 | #define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \ |
| 33 | struct btrfs_ioctl_vol_args) | 40 | struct btrfs_ioctl_vol_args) |
| 34 | #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \ | 41 | #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \ |
| @@ -52,11 +59,6 @@ struct btrfs_ioctl_vol_args { | |||
| 52 | struct btrfs_ioctl_vol_args) | 59 | struct btrfs_ioctl_vol_args) |
| 53 | #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \ | 60 | #define BTRFS_IOC_BALANCE _IOW(BTRFS_IOCTL_MAGIC, 12, \ |
| 54 | struct btrfs_ioctl_vol_args) | 61 | struct btrfs_ioctl_vol_args) |
| 55 | struct btrfs_ioctl_clone_range_args { | ||
| 56 | __s64 src_fd; | ||
| 57 | __u64 src_offset, src_length; | ||
| 58 | __u64 dest_offset; | ||
| 59 | }; | ||
| 60 | 62 | ||
| 61 | #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \ | 63 | #define BTRFS_IOC_CLONE_RANGE _IOW(BTRFS_IOCTL_MAGIC, 13, \ |
| 62 | struct btrfs_ioctl_clone_range_args) | 64 | struct btrfs_ioctl_clone_range_args) |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 7256cf242eb0..db9fb3bc1e33 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
| @@ -582,7 +582,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, | |||
| 582 | { | 582 | { |
| 583 | struct btrfs_ioctl_vol_args *vol; | 583 | struct btrfs_ioctl_vol_args *vol; |
| 584 | struct btrfs_fs_devices *fs_devices; | 584 | struct btrfs_fs_devices *fs_devices; |
| 585 | int ret = 0; | 585 | int ret = -ENOTTY; |
| 586 | int len; | 586 | int len; |
| 587 | 587 | ||
| 588 | if (!capable(CAP_SYS_ADMIN)) | 588 | if (!capable(CAP_SYS_ADMIN)) |
| @@ -594,6 +594,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, | |||
| 594 | goto out; | 594 | goto out; |
| 595 | } | 595 | } |
| 596 | len = strnlen(vol->name, BTRFS_PATH_NAME_MAX); | 596 | len = strnlen(vol->name, BTRFS_PATH_NAME_MAX); |
| 597 | |||
| 597 | switch (cmd) { | 598 | switch (cmd) { |
| 598 | case BTRFS_IOC_SCAN_DEV: | 599 | case BTRFS_IOC_SCAN_DEV: |
| 599 | ret = btrfs_scan_one_device(vol->name, FMODE_READ, | 600 | ret = btrfs_scan_one_device(vol->name, FMODE_READ, |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index b187b537888e..3451e1cca2b5 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -220,6 +220,7 @@ loop: | |||
| 220 | tail->bi_next = old_head; | 220 | tail->bi_next = old_head; |
| 221 | else | 221 | else |
| 222 | device->pending_bio_tail = tail; | 222 | device->pending_bio_tail = tail; |
| 223 | device->running_pending = 0; | ||
| 223 | 224 | ||
| 224 | spin_unlock(&device->io_lock); | 225 | spin_unlock(&device->io_lock); |
| 225 | btrfs_requeue_work(&device->work); | 226 | btrfs_requeue_work(&device->work); |
