aboutsummaryrefslogtreecommitdiff
path: root/fs/bcachefs/reflink.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-10-19 19:03:23 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:30 -0400
commit2a9101a9898920a04e77f70f7bbee84d2c76c527 (patch)
treeafa365a07a12fdd45d2fb49ac81933b4706e5b3c /fs/bcachefs/reflink.c
parent8f1965391cc421ad4e50b4dfe5e06aae661f8870 (diff)
bcachefs: Refactor bch2_trans_commit() path
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/reflink.c')
-rw-r--r--fs/bcachefs/reflink.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/bcachefs/reflink.c b/fs/bcachefs/reflink.c
index 4a4b17f93a2e..6d45ae24479d 100644
--- a/fs/bcachefs/reflink.c
+++ b/fs/bcachefs/reflink.c
@@ -166,6 +166,9 @@ s64 bch2_remap_range(struct bch_fs *c,
u64 src_done, dst_done;
int ret = 0, ret2 = 0;
+ if (!percpu_ref_tryget(&c->writes))
+ return -EROFS;
+
if (!(c->sb.features & (1ULL << BCH_FEATURE_REFLINK))) {
mutex_lock(&c->sb_lock);
if (!(c->sb.features & (1ULL << BCH_FEATURE_REFLINK))) {
@@ -295,5 +298,7 @@ err:
ret = bch2_trans_exit(&trans) ?: ret;
+ percpu_ref_put(&c->writes);
+
return dst_done ?: ret ?: ret2;
}