diff options
author | David Sterba <dsterba@suse.cz> | 2014-04-15 12:50:17 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-04-24 19:43:32 -0400 |
commit | 3f9e3df8da3c51649c15db249978a10f7374236a (patch) | |
tree | 27c95d85e319fe75e4643fdeaf79ae928bbef6b3 /fs | |
parent | c5f7d0bb29df2e1848a236e58e201daf5b4e0f21 (diff) |
btrfs: replace error code from btrfs_drop_extents
There's a case which clone does not handle and used to BUG_ON instead,
(testcase xfstests/btrfs/035), now returns EINVAL. This error code is
confusing to the ioctl caller, as it normally signifies errorneous
arguments.
Change it to ENOPNOTSUPP which allows a fall back to copy instead of
clone. This does not affect the common reflink operation.
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/file.c | 6 | ||||
-rw-r--r-- | fs/btrfs/ioctl.c | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index e7e78fa9085e..1eee3f79d75f 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -805,7 +805,7 @@ next_slot: | |||
805 | if (start > key.offset && end < extent_end) { | 805 | if (start > key.offset && end < extent_end) { |
806 | BUG_ON(del_nr > 0); | 806 | BUG_ON(del_nr > 0); |
807 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { | 807 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { |
808 | ret = -EINVAL; | 808 | ret = -EOPNOTSUPP; |
809 | break; | 809 | break; |
810 | } | 810 | } |
811 | 811 | ||
@@ -851,7 +851,7 @@ next_slot: | |||
851 | */ | 851 | */ |
852 | if (start <= key.offset && end < extent_end) { | 852 | if (start <= key.offset && end < extent_end) { |
853 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { | 853 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { |
854 | ret = -EINVAL; | 854 | ret = -EOPNOTSUPP; |
855 | break; | 855 | break; |
856 | } | 856 | } |
857 | 857 | ||
@@ -877,7 +877,7 @@ next_slot: | |||
877 | if (start > key.offset && end >= extent_end) { | 877 | if (start > key.offset && end >= extent_end) { |
878 | BUG_ON(del_nr > 0); | 878 | BUG_ON(del_nr > 0); |
879 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { | 879 | if (extent_type == BTRFS_FILE_EXTENT_INLINE) { |
880 | ret = -EINVAL; | 880 | ret = -EOPNOTSUPP; |
881 | break; | 881 | break; |
882 | } | 882 | } |
883 | 883 | ||
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index f2e8fcc279a3..7b001abc73c7 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
@@ -3088,7 +3088,7 @@ process_slot: | |||
3088 | new_key.offset + datal, | 3088 | new_key.offset + datal, |
3089 | 1); | 3089 | 1); |
3090 | if (ret) { | 3090 | if (ret) { |
3091 | if (ret != -EINVAL) | 3091 | if (ret != -EOPNOTSUPP) |
3092 | btrfs_abort_transaction(trans, | 3092 | btrfs_abort_transaction(trans, |
3093 | root, ret); | 3093 | root, ret); |
3094 | btrfs_end_transaction(trans, root); | 3094 | btrfs_end_transaction(trans, root); |
@@ -3163,7 +3163,7 @@ process_slot: | |||
3163 | new_key.offset + datal, | 3163 | new_key.offset + datal, |
3164 | 1); | 3164 | 1); |
3165 | if (ret) { | 3165 | if (ret) { |
3166 | if (ret != -EINVAL) | 3166 | if (ret != -EOPNOTSUPP) |
3167 | btrfs_abort_transaction(trans, | 3167 | btrfs_abort_transaction(trans, |
3168 | root, ret); | 3168 | root, ret); |
3169 | btrfs_end_transaction(trans, root); | 3169 | btrfs_end_transaction(trans, root); |