bcachefs: Add an option to disable reflink support
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 2 Jun 2020 20:30:54 +0000 (16:30 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:40 +0000 (17:08 -0400)
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>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/fs-io.c
fs/bcachefs/opts.h
fs/bcachefs/reflink.c

index f0f8964a98b12501510be62e93e165313e20144a..14eca567a10dab6224b8d4acc8fc53f1cb820318 100644 (file)
@@ -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);
index 7ce6d71aca29c5a55e47c420458ddf423e62564f..98fe1ec7867d9cadb1ac9937db09834f624dd600 100644 (file)
@@ -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;
 
index 1e579f67346a241192c19a08dc16b6f60c6b0755..fe457117bf8950015af6a427f3be9bd1a4dbcb66 100644 (file)
@@ -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(),                                                   \
index 2f223be74926bc5f67725a8d578970d6491a9598..3c473f1380a6bdedd4c5b77d66bb45f63bd5d300 100644 (file)
@@ -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;