mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
bcachefs: Fix an error path race
On IO error, bch2_writepages_io_done() will set the page state to indicate nothing's already reserved (since the write didn't happen, we don't know what's already reserved). This can race with the buffered IO path, in between getting a disk reservation and calling bch2_set_page_dirty(). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
92384391c8
commit
406d6d5a07
1 changed files with 6 additions and 1 deletions
|
@ -491,7 +491,12 @@ static void bch2_set_page_dirty(struct bch_fs *c,
|
|||
unsigned sectors = sectors_to_reserve(&s->s[i],
|
||||
res->disk.nr_replicas);
|
||||
|
||||
BUG_ON(sectors > res->disk.sectors);
|
||||
/*
|
||||
* This can happen if we race with the error path in
|
||||
* bch2_writepage_io_done():
|
||||
*/
|
||||
sectors = min_t(unsigned, sectors, res->disk.sectors);
|
||||
|
||||
s->s[i].replicas_reserved += sectors;
|
||||
res->disk.sectors -= sectors;
|
||||
|
||||
|
|
Loading…
Reference in a new issue