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>
 
 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);
 
        u64 aligned_len;
        loff_t ret = 0;
 
+       if (!c->opts.reflink)
+               return -EOPNOTSUPP;
+
        if (remap_flags & ~(REMAP_FILE_DEDUP|REMAP_FILE_ADVISORY))
                return -EINVAL;
 
 
          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(),                                                   \
 
        u64 src_done, dst_done;
        int ret = 0, ret2 = 0;
 
+       if (!c->opts.reflink)
+               return -EOPNOTSUPP;
+
        if (!percpu_ref_tryget(&c->writes))
                return -EROFS;