Loading fs/bcachefs/errcode.h +1 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ x(EINVAL, no_resize_with_buckets_nouse) \ x(EINVAL, inode_unpack_error) \ x(EINVAL, varint_decode_error) \ x(EOPNOTSUPP, may_not_use_incompat_feature) \ x(EROFS, erofs_trans_commit) \ x(EROFS, erofs_no_writes) \ x(EROFS, erofs_journal_err) \ Loading fs/bcachefs/fs-ioctl.c +3 −2 Original line number Diff line number Diff line Loading @@ -69,8 +69,9 @@ static int bch2_inode_flags_set(struct btree_trans *trans, if (ret < 0) return ret; if (!bch2_request_incompat_feature(c,bcachefs_metadata_version_casefolding)) return -EOPNOTSUPP; ret = bch2_request_incompat_feature(c,bcachefs_metadata_version_casefolding); if (ret) return ret; bch2_check_set_feature(c, BCH_FEATURE_casefolding); #else Loading fs/bcachefs/reflink.c +1 −1 Original line number Diff line number Diff line Loading @@ -606,7 +606,7 @@ s64 bch2_remap_range(struct bch_fs *c, u64 dst_done = 0; u32 dst_snapshot, src_snapshot; bool reflink_p_may_update_opts_field = bch2_request_incompat_feature(c, bcachefs_metadata_version_reflink_p_may_update_opts); !bch2_request_incompat_feature(c, bcachefs_metadata_version_reflink_p_may_update_opts); int ret = 0, ret2 = 0; if (!bch2_write_ref_tryget(c, BCH_WRITE_REF_reflink)) Loading fs/bcachefs/super-io.c +6 −4 Original line number Diff line number Diff line Loading @@ -69,12 +69,14 @@ enum bcachefs_metadata_version bch2_latest_compatible_version(enum bcachefs_meta return v; } bool bch2_set_version_incompat(struct bch_fs *c, enum bcachefs_metadata_version version) int bch2_set_version_incompat(struct bch_fs *c, enum bcachefs_metadata_version version) { bool ret = (c->sb.features & BIT_ULL(BCH_FEATURE_incompat_version_field)) && version <= c->sb.version_incompat_allowed; int ret = ((c->sb.features & BIT_ULL(BCH_FEATURE_incompat_version_field)) && version <= c->sb.version_incompat_allowed) ? 0 : -BCH_ERR_may_not_use_incompat_feature; if (ret) { if (!ret) { mutex_lock(&c->sb_lock); SET_BCH_SB_VERSION_INCOMPAT(c->disk_sb.sb, max(BCH_SB_VERSION_INCOMPAT(c->disk_sb.sb), version)); Loading fs/bcachefs/super-io.h +4 −4 Original line number Diff line number Diff line Loading @@ -21,13 +21,13 @@ static inline bool bch2_version_compatible(u16 version) void bch2_version_to_text(struct printbuf *, enum bcachefs_metadata_version); enum bcachefs_metadata_version bch2_latest_compatible_version(enum bcachefs_metadata_version); bool bch2_set_version_incompat(struct bch_fs *, enum bcachefs_metadata_version); int bch2_set_version_incompat(struct bch_fs *, enum bcachefs_metadata_version); static inline bool bch2_request_incompat_feature(struct bch_fs *c, static inline int bch2_request_incompat_feature(struct bch_fs *c, enum bcachefs_metadata_version version) { return likely(version <= c->sb.version_incompat) ? true ? 0 : bch2_set_version_incompat(c, version); } Loading Loading
fs/bcachefs/errcode.h +1 −0 Original line number Diff line number Diff line Loading @@ -206,6 +206,7 @@ x(EINVAL, no_resize_with_buckets_nouse) \ x(EINVAL, inode_unpack_error) \ x(EINVAL, varint_decode_error) \ x(EOPNOTSUPP, may_not_use_incompat_feature) \ x(EROFS, erofs_trans_commit) \ x(EROFS, erofs_no_writes) \ x(EROFS, erofs_journal_err) \ Loading
fs/bcachefs/fs-ioctl.c +3 −2 Original line number Diff line number Diff line Loading @@ -69,8 +69,9 @@ static int bch2_inode_flags_set(struct btree_trans *trans, if (ret < 0) return ret; if (!bch2_request_incompat_feature(c,bcachefs_metadata_version_casefolding)) return -EOPNOTSUPP; ret = bch2_request_incompat_feature(c,bcachefs_metadata_version_casefolding); if (ret) return ret; bch2_check_set_feature(c, BCH_FEATURE_casefolding); #else Loading
fs/bcachefs/reflink.c +1 −1 Original line number Diff line number Diff line Loading @@ -606,7 +606,7 @@ s64 bch2_remap_range(struct bch_fs *c, u64 dst_done = 0; u32 dst_snapshot, src_snapshot; bool reflink_p_may_update_opts_field = bch2_request_incompat_feature(c, bcachefs_metadata_version_reflink_p_may_update_opts); !bch2_request_incompat_feature(c, bcachefs_metadata_version_reflink_p_may_update_opts); int ret = 0, ret2 = 0; if (!bch2_write_ref_tryget(c, BCH_WRITE_REF_reflink)) Loading
fs/bcachefs/super-io.c +6 −4 Original line number Diff line number Diff line Loading @@ -69,12 +69,14 @@ enum bcachefs_metadata_version bch2_latest_compatible_version(enum bcachefs_meta return v; } bool bch2_set_version_incompat(struct bch_fs *c, enum bcachefs_metadata_version version) int bch2_set_version_incompat(struct bch_fs *c, enum bcachefs_metadata_version version) { bool ret = (c->sb.features & BIT_ULL(BCH_FEATURE_incompat_version_field)) && version <= c->sb.version_incompat_allowed; int ret = ((c->sb.features & BIT_ULL(BCH_FEATURE_incompat_version_field)) && version <= c->sb.version_incompat_allowed) ? 0 : -BCH_ERR_may_not_use_incompat_feature; if (ret) { if (!ret) { mutex_lock(&c->sb_lock); SET_BCH_SB_VERSION_INCOMPAT(c->disk_sb.sb, max(BCH_SB_VERSION_INCOMPAT(c->disk_sb.sb), version)); Loading
fs/bcachefs/super-io.h +4 −4 Original line number Diff line number Diff line Loading @@ -21,13 +21,13 @@ static inline bool bch2_version_compatible(u16 version) void bch2_version_to_text(struct printbuf *, enum bcachefs_metadata_version); enum bcachefs_metadata_version bch2_latest_compatible_version(enum bcachefs_metadata_version); bool bch2_set_version_incompat(struct bch_fs *, enum bcachefs_metadata_version); int bch2_set_version_incompat(struct bch_fs *, enum bcachefs_metadata_version); static inline bool bch2_request_incompat_feature(struct bch_fs *c, static inline int bch2_request_incompat_feature(struct bch_fs *c, enum bcachefs_metadata_version version) { return likely(version <= c->sb.version_incompat) ? true ? 0 : bch2_set_version_incompat(c, version); } Loading