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
d5c5b337
Commit
d5c5b337
authored
Sep 06, 2024
by
Kent Overstreet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bcachefs: Don't drop devices with stripe pointers
Signed-off-by:
Kent Overstreet
<
kent.overstreet@linux.dev
>
parent
035d72f7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
32 additions
and
9 deletions
+32
-9
fs/bcachefs/data_update.c
fs/bcachefs/data_update.c
+1
-1
fs/bcachefs/ec.c
fs/bcachefs/ec.c
+1
-1
fs/bcachefs/extents.c
fs/bcachefs/extents.c
+13
-4
fs/bcachefs/extents.h
fs/bcachefs/extents.h
+17
-3
No files found.
fs/bcachefs/data_update.c
View file @
d5c5b337
...
...
@@ -571,7 +571,7 @@ int bch2_extent_drop_ptrs(struct btree_trans *trans,
while
(
data_opts
.
kill_ptrs
)
{
unsigned
i
=
0
,
drop
=
__fls
(
data_opts
.
kill_ptrs
);
bch2_bkey_drop_ptrs
(
bkey_i_to_s
(
n
),
ptr
,
i
++
==
drop
);
bch2_bkey_drop_ptrs
_noerror
(
bkey_i_to_s
(
n
),
ptr
,
i
++
==
drop
);
data_opts
.
kill_ptrs
^=
1U
<<
drop
;
}
...
...
fs/bcachefs/ec.c
View file @
d5c5b337
...
...
@@ -1322,7 +1322,7 @@ static int ec_stripe_update_extent(struct btree_trans *trans,
bkey_reassemble
(
n
,
k
);
bch2_bkey_drop_ptrs
(
bkey_i_to_s
(
n
),
ptr
,
ptr
->
dev
!=
dev
);
bch2_bkey_drop_ptrs
_noerror
(
bkey_i_to_s
(
n
),
ptr
,
ptr
->
dev
!=
dev
);
ec_ptr
=
bch2_bkey_has_device
(
bkey_i_to_s
(
n
),
dev
);
BUG_ON
(
!
ec_ptr
);
...
...
fs/bcachefs/extents.c
View file @
d5c5b337
...
...
@@ -818,6 +818,18 @@ void bch2_bkey_drop_ptr_noerror(struct bkey_s k, struct bch_extent_ptr *ptr)
void
bch2_bkey_drop_ptr
(
struct
bkey_s
k
,
struct
bch_extent_ptr
*
ptr
)
{
if
(
k
.
k
->
type
!=
KEY_TYPE_stripe
)
{
struct
bkey_ptrs_c
ptrs
=
bch2_bkey_ptrs_c
(
k
.
s_c
);
const
union
bch_extent_entry
*
entry
;
struct
extent_ptr_decoded
p
;
bkey_for_each_ptr_decode
(
k
.
k
,
ptrs
,
p
,
entry
)
if
(
p
.
ptr
.
dev
==
ptr
->
dev
&&
p
.
has_ec
)
{
ptr
->
dev
=
BCH_SB_MEMBER_INVALID
;
return
;
}
}
bool
have_dirty
=
bch2_bkey_dirty_devs
(
k
.
s_c
).
nr
;
bch2_bkey_drop_ptr_noerror
(
k
,
ptr
);
...
...
@@ -845,10 +857,7 @@ void bch2_bkey_drop_device(struct bkey_s k, unsigned dev)
void
bch2_bkey_drop_device_noerror
(
struct
bkey_s
k
,
unsigned
dev
)
{
struct
bch_extent_ptr
*
ptr
=
bch2_bkey_has_device
(
k
,
dev
);
if
(
ptr
)
bch2_bkey_drop_ptr_noerror
(
k
,
ptr
);
bch2_bkey_drop_ptrs_noerror
(
k
,
ptr
,
ptr
->
dev
==
dev
);
}
const
struct
bch_extent_ptr
*
bch2_bkey_has_device_c
(
struct
bkey_s_c
k
,
unsigned
dev
)
...
...
fs/bcachefs/extents.h
View file @
d5c5b337
...
...
@@ -611,9 +611,6 @@ unsigned bch2_extent_ptr_desired_durability(struct bch_fs *, struct extent_ptr_d
unsigned
bch2_extent_ptr_durability
(
struct
bch_fs
*
,
struct
extent_ptr_decoded
*
);
unsigned
bch2_bkey_durability
(
struct
bch_fs
*
,
struct
bkey_s_c
);
void
bch2_bkey_drop_device
(
struct
bkey_s
,
unsigned
);
void
bch2_bkey_drop_device_noerror
(
struct
bkey_s
,
unsigned
);
const
struct
bch_extent_ptr
*
bch2_bkey_has_device_c
(
struct
bkey_s_c
,
unsigned
);
static
inline
struct
bch_extent_ptr
*
bch2_bkey_has_device
(
struct
bkey_s
k
,
unsigned
dev
)
...
...
@@ -652,6 +649,23 @@ void bch2_extent_ptr_decoded_append(struct bkey_i *,
void
bch2_bkey_drop_ptr_noerror
(
struct
bkey_s
,
struct
bch_extent_ptr
*
);
void
bch2_bkey_drop_ptr
(
struct
bkey_s
,
struct
bch_extent_ptr
*
);
void
bch2_bkey_drop_device_noerror
(
struct
bkey_s
,
unsigned
);
void
bch2_bkey_drop_device
(
struct
bkey_s
,
unsigned
);
#define bch2_bkey_drop_ptrs_noerror(_k, _ptr, _cond) \
do { \
__label__ _again; \
struct bkey_ptrs _ptrs; \
_again: \
_ptrs = bch2_bkey_ptrs(_k); \
\
bkey_for_each_ptr(_ptrs, _ptr) \
if (_cond) { \
bch2_bkey_drop_ptr_noerror(_k, _ptr); \
goto _again; \
} \
} while (0)
#define bch2_bkey_drop_ptrs(_k, _ptr, _cond) \
do { \
__label__ _again; \
...
...
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