From: Kent Overstreet Date: Mon, 21 Feb 2022 10:05:29 +0000 (-0500) Subject: bcachefs: Don't issue discards when in nochanges mode X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3117db99f30b26ebf09ecc323cbefcd51d83467b;p=users%2Fjedix%2Flinux-maple.git bcachefs: Don't issue discards when in nochanges mode When the nochanges option is selected, we're supposed to never issue writes. Unfortunately, it seems discards were missed when implemnting this, leading to some painful filesystem corruption. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c index 700d1e00aaf9..fac040aa0d5a 100644 --- a/fs/bcachefs/alloc_background.c +++ b/fs/bcachefs/alloc_background.c @@ -801,7 +801,8 @@ static int push_invalidated_bucket(struct bch_fs *c, struct bch_dev *ca, u64 b) static void discard_one_bucket(struct bch_fs *c, struct bch_dev *ca, u64 b) { - if (ca->mi.discard && + if (!c->opts.nochanges && + ca->mi.discard && bdev_max_discard_sectors(ca->disk_sb.bdev)) blkdev_issue_discard(ca->disk_sb.bdev, bucket_to_sector(ca, b), ca->mi.bucket_size, GFP_NOFS); diff --git a/fs/bcachefs/journal_reclaim.c b/fs/bcachefs/journal_reclaim.c index d72b17dc935a..84cc952a7ac5 100644 --- a/fs/bcachefs/journal_reclaim.c +++ b/fs/bcachefs/journal_reclaim.c @@ -286,7 +286,8 @@ void bch2_journal_do_discards(struct journal *j) struct journal_device *ja = &ca->journal; while (should_discard_bucket(j, ja)) { - if (ca->mi.discard && + if (!c->opts.nochanges && + ca->mi.discard && bdev_max_discard_sectors(ca->disk_sb.bdev)) blkdev_issue_discard(ca->disk_sb.bdev, bucket_to_sector(ca,