diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-12-28 19:58:47 -0500 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-03-14 21:02:12 -0400 |
| commit | ca24130ee412d991ef9925bf1b507f973daa9740 (patch) | |
| tree | 7d0820104958ed81fa29057919015164d4ad4374 /fs/bcachefs/extents.c | |
| parent | bcachefs: __bch2_move_data_phys() now uses bch2_btree_node_rewrite_pos() (diff) | |
| download | linux-ca24130ee412d991ef9925bf1b507f973daa9740.tar.gz linux-ca24130ee412d991ef9925bf1b507f973daa9740.zip | |
bcachefs: bch2_bkey_pick_read_device() can now specify a device
To be used for scrub, where we want the read to come from a specific
device.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/extents.c')
| -rw-r--r-- | fs/bcachefs/extents.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index 2d8042f853dc..ec653109de5b 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -114,8 +114,9 @@ static inline bool ptr_better(struct bch_fs *c, * other devices, it will still pick a pointer from avoid. */ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k, - struct bch_io_failures *failed, - struct extent_ptr_decoded *pick) + struct bch_io_failures *failed, + struct extent_ptr_decoded *pick, + int dev) { struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k); const union bch_extent_entry *entry; @@ -137,6 +138,10 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k, break; } + /* Are we being asked to read from a specific device? */ + if (dev >= 0 && p.ptr.dev != dev) + continue; + /* * If there are any dirty pointers it's an error if we can't * read: |
