diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-06-02 16:30:54 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:40 -0400 |
commit | 36b8372b595748d37dcdcd915c176bada978fbe5 (patch) | |
tree | b90232bfc25d7bad19a569884da2116e995affb0 /fs | |
parent | 039fc4c5221f7433d8383e25a7c70b30793b4916 (diff) | |
download | lwn-36b8372b595748d37dcdcd915c176bada978fbe5.tar.gz lwn-36b8372b595748d37dcdcd915c176bada978fbe5.zip |
bcachefs: Add an option to disable reflink support
Reflink might be buggy, so we're adding an option so users can help
bisect what's going on.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/bcachefs/bcachefs_format.h | 2 | ||||
-rw-r--r-- | fs/bcachefs/fs-io.c | 3 | ||||
-rw-r--r-- | fs/bcachefs/opts.h | 5 | ||||
-rw-r--r-- | fs/bcachefs/reflink.c | 3 |
4 files changed, 13 insertions, 0 deletions
diff --git a/fs/bcachefs/bcachefs_format.h b/fs/bcachefs/bcachefs_format.h index f0f8964a98b1..14eca567a10d 100644 --- a/fs/bcachefs/bcachefs_format.h +++ b/fs/bcachefs/bcachefs_format.h @@ -1266,6 +1266,8 @@ LE64_BITMASK(BCH_SB_PRJQUOTA, struct bch_sb, flags[0], 59, 60); LE64_BITMASK(BCH_SB_HAS_ERRORS, struct bch_sb, flags[0], 60, 61); +LE64_BITMASK(BCH_SB_REFLINK, struct bch_sb, flags[0], 61, 62); + /* 61-64 unused */ LE64_BITMASK(BCH_SB_STR_HASH_TYPE, struct bch_sb, flags[1], 0, 4); diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 7ce6d71aca29..98fe1ec7867d 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -2812,6 +2812,9 @@ loff_t bch2_remap_file_range(struct file *file_src, loff_t pos_src, u64 aligned_len; loff_t ret = 0; + if (!c->opts.reflink) + return -EOPNOTSUPP; + if (remap_flags & ~(REMAP_FILE_DEDUP|REMAP_FILE_ADVISORY)) return -EINVAL; diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h index 1e579f67346a..fe457117bf89 100644 --- a/fs/bcachefs/opts.h +++ b/fs/bcachefs/opts.h @@ -207,6 +207,11 @@ enum opt_type { OPT_BOOL(), \ BCH_SB_PRJQUOTA, false, \ NULL, "Enable project quotas") \ + x(reflink, u8, \ + OPT_FORMAT|OPT_MOUNT|OPT_RUNTIME, \ + OPT_BOOL(), \ + BCH_SB_REFLINK, true, \ + NULL, "Enable reflink support") \ x(degraded, u8, \ OPT_MOUNT, \ OPT_BOOL(), \ diff --git a/fs/bcachefs/reflink.c b/fs/bcachefs/reflink.c index 2f223be74926..3c473f1380a6 100644 --- a/fs/bcachefs/reflink.c +++ b/fs/bcachefs/reflink.c @@ -167,6 +167,9 @@ s64 bch2_remap_range(struct bch_fs *c, u64 src_done, dst_done; int ret = 0, ret2 = 0; + if (!c->opts.reflink) + return -EOPNOTSUPP; + if (!percpu_ref_tryget(&c->writes)) return -EROFS; |