Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
633cf069
Commit
633cf069
authored
7 months ago
by
Kent Overstreet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bcachefs: Kill bch2_dev_bkey_exists() in backpointer code
Signed-off-by:
Kent Overstreet
<
kent.overstreet@linux.dev
>
parent
1f2f92ec
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
102 additions
and
52 deletions
+102
-52
fs/bcachefs/alloc_foreground.c
fs/bcachefs/alloc_foreground.c
+1
-1
fs/bcachefs/backpointers.c
fs/bcachefs/backpointers.c
+70
-36
fs/bcachefs/backpointers.h
fs/bcachefs/backpointers.h
+26
-11
fs/bcachefs/buckets.c
fs/bcachefs/buckets.c
+1
-1
fs/bcachefs/ec.c
fs/bcachefs/ec.c
+3
-2
fs/bcachefs/move.c
fs/bcachefs/move.c
+1
-1
No files found.
fs/bcachefs/alloc_foreground.c
View file @
633cf069
...
...
@@ -342,7 +342,7 @@ static struct open_bucket *try_alloc_bucket(struct btree_trans *trans, struct bc
struct
bch_backpointer
bp
;
struct
bpos
bp_pos
=
POS_MIN
;
ret
=
bch2_get_next_backpointer
(
trans
,
POS
(
ca
->
dev_idx
,
b
),
-
1
,
ret
=
bch2_get_next_backpointer
(
trans
,
ca
,
POS
(
ca
->
dev_idx
,
b
),
-
1
,
&
bp_pos
,
&
bp
,
BTREE_ITER_nopreserve
);
if
(
ret
)
{
...
...
This diff is collapsed.
Click to expand it.
fs/bcachefs/backpointers.c
View file @
633cf069
...
...
@@ -23,6 +23,7 @@ static bool extent_matches_bp(struct bch_fs *c,
const
union
bch_extent_entry
*
entry
;
struct
extent_ptr_decoded
p
;
rcu_read_lock
();
bkey_for_each_ptr_decode
(
k
.
k
,
ptrs
,
p
,
entry
)
{
struct
bpos
bucket2
;
struct
bch_backpointer
bp2
;
...
...
@@ -30,13 +31,18 @@ static bool extent_matches_bp(struct bch_fs *c,
if
(
p
.
ptr
.
cached
)
continue
;
struct
bch_dev
*
ca
=
bch2_dev_bkey_exists
(
c
,
p
.
ptr
.
dev
);
struct
bch_dev
*
ca
=
bch2_dev_rcu
(
c
,
p
.
ptr
.
dev
);
if
(
!
ca
)
continue
;
bch2_extent_ptr_to_bp
(
c
,
ca
,
btree_id
,
level
,
k
,
p
,
entry
,
&
bucket2
,
&
bp2
);
if
(
bpos_eq
(
bucket
,
bucket2
)
&&
!
memcmp
(
&
bp
,
&
bp2
,
sizeof
(
bp
)))
!
memcmp
(
&
bp
,
&
bp2
,
sizeof
(
bp
)))
{
rcu_read_unlock
();
return
true
;
}
}
rcu_read_unlock
();
return
false
;
}
...
...
@@ -47,16 +53,21 @@ int bch2_backpointer_invalid(struct bch_fs *c, struct bkey_s_c k,
{
struct
bkey_s_c_backpointer
bp
=
bkey_s_c_to_backpointer
(
k
);
/* these will be caught by fsck */
if
(
!
bch2_dev_exists
(
c
,
bp
.
k
->
p
.
inode
))
rcu_read_lock
();
struct
bch_dev
*
ca
=
bch2_dev_rcu
(
c
,
bp
.
k
->
p
.
inode
);
if
(
!
ca
)
{
/* these will be caught by fsck */
rcu_read_unlock
();
return
0
;
}
struct
bch_dev
*
ca
=
bch2_dev_bkey_exists
(
c
,
bp
.
k
->
p
.
inode
);
struct
bpos
bucket
=
bp_pos_to_bucket
(
c
,
bp
.
k
->
p
);
struct
bpos
bucket
=
bp_pos_to_bucket
(
ca
,
bp
.
k
->
p
);
struct
bpos
bp_pos
=
bucket_pos_to_bp_noerror
(
ca
,
bucket
,
bp
.
v
->
bucket_offset
);
rcu_read_unlock
();
int
ret
=
0
;
bkey_fsck_err_on
((
bp
.
v
->
bucket_offset
>>
MAX_EXTENT_COMPRESS_RATIO_SHIFT
)
>=
ca
->
mi
.
bucket_size
||
!
bpos_eq
(
bp
.
k
->
p
,
b
ucket_pos_to_bp_noerror
(
ca
,
bucket
,
bp
.
v
->
bucket_offset
)
),
!
bpos_eq
(
bp
.
k
->
p
,
b
p_pos
),
c
,
err
,
backpointer_bucket_offset_wrong
,
"backpointer bucket_offset wrong"
);
...
...
@@ -77,10 +88,16 @@ void bch2_backpointer_to_text(struct printbuf *out, const struct bch_backpointer
void
bch2_backpointer_k_to_text
(
struct
printbuf
*
out
,
struct
bch_fs
*
c
,
struct
bkey_s_c
k
)
{
if
(
bch2_dev_exists
(
c
,
k
.
k
->
p
.
inode
))
{
rcu_read_lock
();
struct
bch_dev
*
ca
=
bch2_dev_rcu
(
c
,
k
.
k
->
p
.
inode
);
if
(
ca
)
{
struct
bpos
bucket
=
bp_pos_to_bucket
(
ca
,
k
.
k
->
p
);
rcu_read_unlock
();
prt_str
(
out
,
"bucket="
);
bch2_bpos_to_text
(
out
,
b
p_pos_to_bucket
(
c
,
k
.
k
->
p
)
);
bch2_bpos_to_text
(
out
,
b
ucket
);
prt_str
(
out
,
" "
);
}
else
{
rcu_read_unlock
();
}
bch2_backpointer_to_text
(
out
,
bkey_s_c_to_backpointer
(
k
).
v
);
...
...
@@ -146,6 +163,7 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
}
int
bch2_bucket_backpointer_mod_nowritebuffer
(
struct
btree_trans
*
trans
,
struct
bch_dev
*
ca
,
struct
bpos
bucket
,
struct
bch_backpointer
bp
,
struct
bkey_s_c
orig_k
,
...
...
@@ -162,7 +180,7 @@ int bch2_bucket_backpointer_mod_nowritebuffer(struct btree_trans *trans,
return
ret
;
bkey_backpointer_init
(
&
bp_k
->
k_i
);
bp_k
->
k
.
p
=
bucket_pos_to_bp
(
trans
->
c
,
bucket
,
bp
.
bucket_offset
);
bp_k
->
k
.
p
=
bucket_pos_to_bp
(
ca
,
bucket
,
bp
.
bucket_offset
);
bp_k
->
v
=
bp
;
if
(
!
insert
)
{
...
...
@@ -198,13 +216,13 @@ int bch2_bucket_backpointer_mod_nowritebuffer(struct btree_trans *trans,
* Find the next backpointer >= *bp_offset:
*/
int
bch2_get_next_backpointer
(
struct
btree_trans
*
trans
,
struct
bch_dev
*
ca
,
struct
bpos
bucket
,
int
gen
,
struct
bpos
*
bp_pos
,
struct
bch_backpointer
*
bp
,
unsigned
iter_flags
)
{
struct
bch_fs
*
c
=
trans
->
c
;
struct
bpos
bp_end_pos
=
bucket_pos_to_bp
(
c
,
bpos_nosnap_successor
(
bucket
),
0
);
struct
bpos
bp_end_pos
=
bucket_pos_to_bp
(
ca
,
bpos_nosnap_successor
(
bucket
),
0
);
struct
btree_iter
alloc_iter
=
{
NULL
},
bp_iter
=
{
NULL
};
struct
bkey_s_c
k
;
int
ret
=
0
;
...
...
@@ -224,7 +242,7 @@ int bch2_get_next_backpointer(struct btree_trans *trans,
goto
done
;
}
*
bp_pos
=
bpos_max
(
*
bp_pos
,
bucket_pos_to_bp
(
c
,
bucket
,
0
));
*
bp_pos
=
bpos_max
(
*
bp_pos
,
bucket_pos_to_bp
(
c
a
,
bucket
,
0
));
for_each_btree_key_norestart
(
trans
,
bp_iter
,
BTREE_ID_backpointers
,
*
bp_pos
,
iter_flags
,
k
,
ret
)
{
...
...
@@ -250,7 +268,6 @@ static void backpointer_not_found(struct btree_trans *trans,
{
struct
bch_fs
*
c
=
trans
->
c
;
struct
printbuf
buf
=
PRINTBUF
;
struct
bpos
bucket
=
bp_pos_to_bucket
(
c
,
bp_pos
);
/*
* If we're using the btree write buffer, the backpointer we were
...
...
@@ -260,6 +277,10 @@ static void backpointer_not_found(struct btree_trans *trans,
if
(
likely
(
!
bch2_backpointers_no_use_write_buffer
))
return
;
struct
bpos
bucket
;
if
(
!
bp_pos_to_bucket_nodev
(
c
,
bp_pos
,
&
bucket
))
return
;
prt_printf
(
&
buf
,
"backpointer doesn't match %s it points to:
\n
"
,
bp
.
level
?
"btree node"
:
"extent"
);
prt_printf
(
&
buf
,
"bucket: "
);
...
...
@@ -289,15 +310,17 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
{
if
(
likely
(
!
bp
.
level
))
{
struct
bch_fs
*
c
=
trans
->
c
;
struct
bpos
bucket
=
bp_pos_to_bucket
(
c
,
bp_pos
);
struct
bkey_s_c
k
;
struct
bpos
bucket
;
if
(
!
bp_pos_to_bucket_nodev
(
c
,
bp_pos
,
&
bucket
))
return
bkey_s_c_err
(
-
EIO
);
bch2_trans_node_iter_init
(
trans
,
iter
,
bp
.
btree_id
,
bp
.
pos
,
0
,
0
,
iter_flags
);
k
=
bch2_btree_iter_peek_slot
(
iter
);
struct
bkey_s_c
k
=
bch2_btree_iter_peek_slot
(
iter
);
if
(
bkey_err
(
k
))
{
bch2_trans_iter_exit
(
trans
,
iter
);
return
k
;
...
...
@@ -326,18 +349,20 @@ struct btree *bch2_backpointer_get_node(struct btree_trans *trans,
struct
bch_backpointer
bp
)
{
struct
bch_fs
*
c
=
trans
->
c
;
struct
bpos
bucket
=
bp_pos_to_bucket
(
c
,
bp_pos
);
struct
btree
*
b
;
BUG_ON
(
!
bp
.
level
);
struct
bpos
bucket
;
if
(
!
bp_pos_to_bucket_nodev
(
c
,
bp_pos
,
&
bucket
))
return
ERR_PTR
(
-
EIO
);
bch2_trans_node_iter_init
(
trans
,
iter
,
bp
.
btree_id
,
bp
.
pos
,
0
,
bp
.
level
-
1
,
0
);
b
=
bch2_btree_iter_peek_node
(
iter
);
struct
btree
*
b
=
bch2_btree_iter_peek_node
(
iter
);
if
(
IS_ERR_OR_NULL
(
b
))
goto
err
;
...
...
@@ -368,16 +393,16 @@ static int bch2_check_btree_backpointer(struct btree_trans *trans, struct btree_
struct
printbuf
buf
=
PRINTBUF
;
int
ret
=
0
;
if
(
fsck_err_on
(
!
bch2_dev_exists
(
c
,
k
.
k
->
p
.
inode
),
c
,
backpointer_to_missing_device
,
"backpointer for missing device:
\n
%s"
,
(
bch2_bkey_val_to_text
(
&
buf
,
c
,
k
),
buf
.
buf
)))
{
ret
=
bch2_btree_delete_at
(
trans
,
bp_iter
,
0
);
struct
bpos
bucket
;
if
(
!
bp_pos_to_bucket_nodev_noerror
(
c
,
k
.
k
->
p
,
&
bucket
))
{
if
(
fsck_err
(
c
,
backpointer_to_missing_device
,
"backpointer for missing device:
\n
%s"
,
(
bch2_bkey_val_to_text
(
&
buf
,
c
,
k
),
buf
.
buf
)))
ret
=
bch2_btree_delete_at
(
trans
,
bp_iter
,
0
);
goto
out
;
}
alloc_k
=
bch2_bkey_get_iter
(
trans
,
&
alloc_iter
,
BTREE_ID_alloc
,
bp_pos_to_bucket
(
c
,
k
.
k
->
p
),
0
);
alloc_k
=
bch2_bkey_get_iter
(
trans
,
&
alloc_iter
,
BTREE_ID_alloc
,
bucket
,
0
);
ret
=
bkey_err
(
alloc_k
);
if
(
ret
)
goto
out
;
...
...
@@ -512,25 +537,27 @@ static int check_bp_exists(struct btree_trans *trans,
struct
printbuf
buf
=
PRINTBUF
;
struct
bkey_s_c
bp_k
;
struct
bkey_buf
tmp
;
int
ret
;
int
ret
=
0
;
bch2_bkey_buf_init
(
&
tmp
);
if
(
!
bch2_dev_bucket_exists
(
c
,
bucket
))
{
struct
bch_dev
*
ca
=
bch2_dev_bucket_tryget
(
c
,
bucket
);
if
(
!
ca
)
{
prt_str
(
&
buf
,
"extent for nonexistent device:bucket "
);
bch2_bpos_to_text
(
&
buf
,
bucket
);
prt_str
(
&
buf
,
"
\n
"
);
bch2_bkey_val_to_text
(
&
buf
,
c
,
orig_k
);
bch_err
(
c
,
"%s"
,
buf
.
buf
);
return
-
BCH_ERR_fsck_repair_unimplemented
;
ret
=
-
BCH_ERR_fsck_repair_unimplemented
;
goto
err
;
}
if
(
bpos_lt
(
bucket
,
s
->
bucket_start
)
||
bpos_gt
(
bucket
,
s
->
bucket_end
))
return
0
;
goto
out
;
bp_k
=
bch2_bkey_get_iter
(
trans
,
&
bp_iter
,
BTREE_ID_backpointers
,
bucket_pos_to_bp
(
c
,
bucket
,
bp
.
bucket_offset
),
bucket_pos_to_bp
(
c
a
,
bucket
,
bp
.
bucket_offset
),
0
);
ret
=
bkey_err
(
bp_k
);
if
(
ret
)
...
...
@@ -563,6 +590,7 @@ static int check_bp_exists(struct btree_trans *trans,
bch2_trans_iter_exit
(
trans
,
&
other_extent_iter
);
bch2_trans_iter_exit
(
trans
,
&
bp_iter
);
bch2_bkey_buf_exit
(
&
tmp
,
c
);
bch2_dev_put
(
ca
);
printbuf_exit
(
&
buf
);
return
ret
;
check_existing_bp:
...
...
@@ -638,13 +666,13 @@ static int check_bp_exists(struct btree_trans *trans,
struct
bkey_i_backpointer
n_bp_k
;
bkey_backpointer_init
(
&
n_bp_k
.
k_i
);
n_bp_k
.
k
.
p
=
bucket_pos_to_bp
(
trans
->
c
,
bucket
,
bp
.
bucket_offset
);
n_bp_k
.
k
.
p
=
bucket_pos_to_bp
(
ca
,
bucket
,
bp
.
bucket_offset
);
n_bp_k
.
v
=
bp
;
prt_printf
(
&
buf
,
"
\n
want: "
);
bch2_bkey_val_to_text
(
&
buf
,
c
,
bkey_i_to_s_c
(
&
n_bp_k
.
k_i
));
if
(
fsck_err
(
c
,
ptr_to_missing_backpointer
,
"%s"
,
buf
.
buf
))
ret
=
bch2_bucket_backpointer_mod
(
trans
,
bucket
,
bp
,
orig_k
,
true
);
ret
=
bch2_bucket_backpointer_mod
(
trans
,
ca
,
bucket
,
bp
,
orig_k
,
true
);
goto
out
;
}
...
...
@@ -668,8 +696,14 @@ static int check_extent_to_backpointers(struct btree_trans *trans,
if
(
p
.
ptr
.
cached
)
continue
;
struct
bch_dev
*
ca
=
bch2_dev_bkey_exists
(
c
,
p
.
ptr
.
dev
);
bch2_extent_ptr_to_bp
(
c
,
ca
,
btree
,
level
,
k
,
p
,
entry
,
&
bucket_pos
,
&
bp
);
rcu_read_lock
();
struct
bch_dev
*
ca
=
bch2_dev_rcu
(
c
,
p
.
ptr
.
dev
);
if
(
ca
)
bch2_extent_ptr_to_bp
(
c
,
ca
,
btree
,
level
,
k
,
p
,
entry
,
&
bucket_pos
,
&
bp
);
rcu_read_unlock
();
if
(
!
ca
)
continue
;
ret
=
check_bp_exists
(
trans
,
s
,
bucket_pos
,
bp
,
k
);
if
(
ret
)
...
...
This diff is collapsed.
Click to expand it.
fs/bcachefs/backpointers.h
View file @
633cf069
...
...
@@ -6,6 +6,7 @@
#include "btree_iter.h"
#include "btree_update.h"
#include "buckets.h"
#include "error.h"
#include "super.h"
static
inline
u64
swab40
(
u64
x
)
...
...
@@ -36,15 +37,29 @@ void bch2_backpointer_swab(struct bkey_s);
* Convert from pos in backpointer btree to pos of corresponding bucket in alloc
* btree:
*/
static
inline
struct
bpos
bp_pos_to_bucket
(
const
struct
bch_fs
*
c
,
struct
bpos
bp_pos
)
static
inline
struct
bpos
bp_pos_to_bucket
(
const
struct
bch_dev
*
ca
,
struct
bpos
bp_pos
)
{
struct
bch_dev
*
ca
=
bch2_dev_bkey_exists
(
c
,
bp_pos
.
inode
);
u64
bucket_sector
=
bp_pos
.
offset
>>
MAX_EXTENT_COMPRESS_RATIO_SHIFT
;
return
POS
(
bp_pos
.
inode
,
sector_to_bucket
(
ca
,
bucket_sector
));
}
static
inline
bool
bp_pos_to_bucket_nodev_noerror
(
struct
bch_fs
*
c
,
struct
bpos
bp_pos
,
struct
bpos
*
bucket
)
{
rcu_read_lock
();
struct
bch_dev
*
ca
=
bch2_dev_rcu
(
c
,
bp_pos
.
inode
);
if
(
ca
)
*
bucket
=
bp_pos_to_bucket
(
ca
,
bp_pos
);
rcu_read_unlock
();
return
ca
!=
NULL
;
}
static
inline
bool
bp_pos_to_bucket_nodev
(
struct
bch_fs
*
c
,
struct
bpos
bp_pos
,
struct
bpos
*
bucket
)
{
return
!
bch2_fs_inconsistent_on
(
!
bp_pos_to_bucket_nodev_noerror
(
c
,
bp_pos
,
bucket
),
c
,
"backpointer for missing device %llu"
,
bp_pos
.
inode
);
}
static
inline
struct
bpos
bucket_pos_to_bp_noerror
(
const
struct
bch_dev
*
ca
,
struct
bpos
bucket
,
u64
bucket_offset
)
...
...
@@ -57,32 +72,32 @@ static inline struct bpos bucket_pos_to_bp_noerror(const struct bch_dev *ca,
/*
* Convert from pos in alloc btree + bucket offset to pos in backpointer btree:
*/
static
inline
struct
bpos
bucket_pos_to_bp
(
const
struct
bch_
fs
*
c
,
static
inline
struct
bpos
bucket_pos_to_bp
(
const
struct
bch_
dev
*
ca
,
struct
bpos
bucket
,
u64
bucket_offset
)
{
struct
bch_dev
*
ca
=
bch2_dev_bkey_exists
(
c
,
bucket
.
inode
);
struct
bpos
ret
=
bucket_pos_to_bp_noerror
(
ca
,
bucket
,
bucket_offset
);
EBUG_ON
(
!
bkey_eq
(
bucket
,
bp_pos_to_bucket
(
c
,
ret
)));
EBUG_ON
(
!
bkey_eq
(
bucket
,
bp_pos_to_bucket
(
c
a
,
ret
)));
return
ret
;
}
int
bch2_bucket_backpointer_mod_nowritebuffer
(
struct
btree_trans
*
,
struct
b
pos
bucket
,
struct
bch_backpointer
,
struct
bkey_s_c
,
bool
);
int
bch2_bucket_backpointer_mod_nowritebuffer
(
struct
btree_trans
*
,
struct
b
ch_dev
*
,
struct
b
pos
bucket
,
struct
b
ch_backpointer
,
struct
bkey_s_c
,
bool
);
static
inline
int
bch2_bucket_backpointer_mod
(
struct
btree_trans
*
trans
,
struct
bch_dev
*
ca
,
struct
bpos
bucket
,
struct
bch_backpointer
bp
,
struct
bkey_s_c
orig_k
,
bool
insert
)
{
if
(
unlikely
(
bch2_backpointers_no_use_write_buffer
))
return
bch2_bucket_backpointer_mod_nowritebuffer
(
trans
,
bucket
,
bp
,
orig_k
,
insert
);
return
bch2_bucket_backpointer_mod_nowritebuffer
(
trans
,
ca
,
bucket
,
bp
,
orig_k
,
insert
);
struct
bkey_i_backpointer
bp_k
;
bkey_backpointer_init
(
&
bp_k
.
k_i
);
bp_k
.
k
.
p
=
bucket_pos_to_bp
(
trans
->
c
,
bucket
,
bp
.
bucket_offset
);
bp_k
.
k
.
p
=
bucket_pos_to_bp
(
ca
,
bucket
,
bp
.
bucket_offset
);
bp_k
.
v
=
bp
;
if
(
!
insert
)
{
...
...
@@ -142,7 +157,7 @@ static inline void bch2_extent_ptr_to_bp(struct bch_fs *c, struct bch_dev *ca,
};
}
int
bch2_get_next_backpointer
(
struct
btree_trans
*
,
struct
bpos
,
int
,
int
bch2_get_next_backpointer
(
struct
btree_trans
*
,
struct
b
ch_dev
*
ca
,
struct
b
pos
,
int
,
struct
bpos
*
,
struct
bch_backpointer
*
,
unsigned
);
struct
bkey_s_c
bch2_backpointer_get_key
(
struct
btree_trans
*
,
struct
btree_iter
*
,
struct
bpos
,
struct
bch_backpointer
,
...
...
This diff is collapsed.
Click to expand it.
fs/bcachefs/buckets.c
View file @
633cf069
...
...
@@ -988,7 +988,7 @@ static int bch2_trigger_pointer(struct btree_trans *trans,
goto
err
;
if
(
!
p
.
ptr
.
cached
)
{
ret
=
bch2_bucket_backpointer_mod
(
trans
,
bucket
,
bp
,
k
,
insert
);
ret
=
bch2_bucket_backpointer_mod
(
trans
,
ca
,
bucket
,
bp
,
k
,
insert
);
if
(
ret
)
goto
err
;
}
...
...
This diff is collapsed.
Click to expand it.
fs/bcachefs/ec.c
View file @
633cf069
...
...
@@ -1198,6 +1198,7 @@ static int ec_stripe_key_update(struct btree_trans *trans,
}
static
int
ec_stripe_update_extent
(
struct
btree_trans
*
trans
,
struct
bch_dev
*
ca
,
struct
bpos
bucket
,
u8
gen
,
struct
ec_stripe_buf
*
s
,
struct
bpos
*
bp_pos
)
...
...
@@ -1213,7 +1214,7 @@ static int ec_stripe_update_extent(struct btree_trans *trans,
struct
bkey_i
*
n
;
int
ret
,
dev
,
block
;
ret
=
bch2_get_next_backpointer
(
trans
,
bucket
,
gen
,
ret
=
bch2_get_next_backpointer
(
trans
,
ca
,
bucket
,
gen
,
bp_pos
,
&
bp
,
BTREE_ITER_cached
);
if
(
ret
)
return
ret
;
...
...
@@ -1311,7 +1312,7 @@ static int ec_stripe_update_bucket(struct btree_trans *trans, struct ec_stripe_b
ret
=
commit_do
(
trans
,
NULL
,
NULL
,
BCH_TRANS_COMMIT_no_check_rw
|
BCH_TRANS_COMMIT_no_enospc
,
ec_stripe_update_extent
(
trans
,
bucket_pos
,
ptr
.
gen
,
s
,
&
bp_pos
));
ec_stripe_update_extent
(
trans
,
ca
,
bucket_pos
,
ptr
.
gen
,
s
,
&
bp_pos
));
if
(
ret
)
break
;
if
(
bkey_eq
(
bp_pos
,
POS_MAX
))
...
...
This diff is collapsed.
Click to expand it.
fs/bcachefs/move.c
View file @
633cf069
...
...
@@ -729,7 +729,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
bch2_trans_begin
(
trans
);
ret
=
bch2_get_next_backpointer
(
trans
,
bucket
,
gen
,
ret
=
bch2_get_next_backpointer
(
trans
,
ca
,
bucket
,
gen
,
&
bp_pos
,
&
bp
,
BTREE_ITER_cached
);
if
(
bch2_err_matches
(
ret
,
BCH_ERR_transaction_restart
))
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment