bcachefs: Don't disallow btree writes to RO devices
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 3 Aug 2020 17:58:36 +0000 (13:58 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:43 +0000 (17:08 -0400)
There's an inherent race with setting devices RO when they have dirty
btree nodes on them. We already check if a btree node is on an RO device
before we dirty it, so this patch just allows those writes so that we
don't have errors forcing the entire filesystem read only when trying to
remove a device.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/io.c

index d9e35329f7078d2e8b799ff666a58e77612d8305..0f4c5c3c408c74e20f0d966fcf48b3ce34a0ddb4 100644 (file)
@@ -481,7 +481,8 @@ void bch2_submit_wbio_replicas(struct bch_write_bio *wbio, struct bch_fs *c,
 
                n->c                    = c;
                n->dev                  = ptr->dev;
-               n->have_ioref           = bch2_dev_get_ioref(ca, WRITE);
+               n->have_ioref           = bch2_dev_get_ioref(ca,
+                                       type == BCH_DATA_btree ? READ : WRITE);
                n->submit_time          = local_clock();
                n->bio.bi_iter.bi_sector = ptr->offset;