Commit 8d84260e authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: data move path should not be trying to move reflink_p keys

This was spotted when the move_extent() path tried to allocate a bio for
a reflink_p extent, but adding pages to the bio failed because we
overflowed bi_max_vecs. Oops.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent b50dd792
...@@ -455,12 +455,11 @@ unsigned bch2_extent_is_compressed(struct bkey_s_c); ...@@ -455,12 +455,11 @@ unsigned bch2_extent_is_compressed(struct bkey_s_c);
bool bch2_bkey_matches_ptr(struct bch_fs *, struct bkey_s_c, bool bch2_bkey_matches_ptr(struct bch_fs *, struct bkey_s_c,
struct bch_extent_ptr, u64); struct bch_extent_ptr, u64);
static inline bool bkey_extent_is_data(const struct bkey *k) static inline bool bkey_extent_is_direct_data(const struct bkey *k)
{ {
switch (k->type) { switch (k->type) {
case KEY_TYPE_btree_ptr: case KEY_TYPE_btree_ptr:
case KEY_TYPE_extent: case KEY_TYPE_extent:
case KEY_TYPE_reflink_p:
case KEY_TYPE_reflink_v: case KEY_TYPE_reflink_v:
return true; return true;
default: default:
...@@ -468,6 +467,12 @@ static inline bool bkey_extent_is_data(const struct bkey *k) ...@@ -468,6 +467,12 @@ static inline bool bkey_extent_is_data(const struct bkey *k)
} }
} }
static inline bool bkey_extent_is_data(const struct bkey *k)
{
return bkey_extent_is_direct_data(k) ||
k->type == KEY_TYPE_reflink_p;
}
/* /*
* Should extent be counted under inode->i_sectors? * Should extent be counted under inode->i_sectors?
*/ */
......
...@@ -547,7 +547,7 @@ static int __bch2_move_data(struct bch_fs *c, ...@@ -547,7 +547,7 @@ static int __bch2_move_data(struct bch_fs *c,
if (bkey_cmp(bkey_start_pos(k.k), end) >= 0) if (bkey_cmp(bkey_start_pos(k.k), end) >= 0)
break; break;
if (!bkey_extent_is_data(k.k)) if (!bkey_extent_is_direct_data(k.k))
goto next_nondata; goto next_nondata;
if (cur_inum != k.k->p.inode) { if (cur_inum != k.k->p.inode) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment