Skip to content

Commit e1c4d2f

Browse files
author
Kent Overstreet
committed
bcachefs: fix restart handling in bch2_fiemap()
We were leaking transaction restart errors to userspace. Signed-off-by: Kent Overstreet <[email protected]>
1 parent 94bdeec commit e1c4d2f

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

fs/bcachefs/fs.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,22 +1268,22 @@ static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info,
12681268
bch2_trans_iter_init(trans, &iter, BTREE_ID_extents,
12691269
POS(ei->v.i_ino, start), 0);
12701270

1271-
while (true) {
1271+
while (!ret || bch2_err_matches(ret, BCH_ERR_transaction_restart)) {
12721272
enum btree_id data_btree = BTREE_ID_extents;
12731273

12741274
bch2_trans_begin(trans);
12751275

12761276
u32 snapshot;
12771277
ret = bch2_subvolume_get_snapshot(trans, ei->ei_inum.subvol, &snapshot);
12781278
if (ret)
1279-
goto err;
1279+
continue;
12801280

12811281
bch2_btree_iter_set_snapshot(&iter, snapshot);
12821282

12831283
k = bch2_btree_iter_peek_upto(&iter, end);
12841284
ret = bkey_err(k);
12851285
if (ret)
1286-
goto err;
1286+
continue;
12871287

12881288
if (!k.k)
12891289
break;
@@ -1303,7 +1303,7 @@ static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info,
13031303
ret = bch2_read_indirect_extent(trans, &data_btree,
13041304
&offset_into_extent, &cur);
13051305
if (ret)
1306-
break;
1306+
continue;
13071307

13081308
k = bkey_i_to_s_c(cur.k);
13091309
bch2_bkey_buf_realloc(&prev, c, k.k->u64s);
@@ -1331,10 +1331,6 @@ static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info,
13311331

13321332
bch2_btree_iter_set_pos(&iter,
13331333
POS(iter.pos.inode, iter.pos.offset + sectors));
1334-
err:
1335-
if (ret &&
1336-
!bch2_err_matches(ret, BCH_ERR_transaction_restart))
1337-
break;
13381334
}
13391335
bch2_trans_iter_exit(trans, &iter);
13401336

0 commit comments

Comments
 (0)