From d1170ce53c5b332caf647f658c6f2a483c3608a7 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 6 Apr 2019 14:32:06 -0400 Subject: [PATCH] bcachefs: allocate sb_read_scratch with __get_free_page kmalloc allocations aren't guranteed alignment for io Signed-off-by: Kent Overstreet --- fs/bcachefs/super-io.c | 2 +- fs/bcachefs/super.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/bcachefs/super-io.c b/fs/bcachefs/super-io.c index 7aaa8b785d57..0fe8ea22c6a1 100644 --- a/fs/bcachefs/super-io.c +++ b/fs/bcachefs/super-io.c @@ -652,7 +652,7 @@ static void read_back_super(struct bch_fs *c, struct bch_dev *ca) bio_reset(bio, ca->disk_sb.bdev, REQ_OP_READ|REQ_SYNC|REQ_META); bio->bi_iter.bi_sector = le64_to_cpu(sb->layout.sb_offset[0]); - bio->bi_iter.bi_size = 4096; + bio->bi_iter.bi_size = PAGE_SIZE; bio->bi_end_io = write_super_endio; bio->bi_private = ca; bch2_bio_map(bio, ca->sb_read_scratch); diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index 85a9400a47fc..18576538613c 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -919,7 +919,7 @@ static void bch2_dev_free(struct bch_dev *ca) free_percpu(ca->io_done); bioset_exit(&ca->replica_set); bch2_dev_buckets_free(ca); - kfree(ca->sb_read_scratch); + free_page((unsigned long) ca->sb_read_scratch); bch2_time_stats_exit(&ca->io_latency[WRITE]); bch2_time_stats_exit(&ca->io_latency[READ]); @@ -1030,7 +1030,7 @@ static struct bch_dev *__bch2_dev_alloc(struct bch_fs *c, 0, GFP_KERNEL) || percpu_ref_init(&ca->io_ref, bch2_dev_io_ref_complete, PERCPU_REF_INIT_DEAD, GFP_KERNEL) || - !(ca->sb_read_scratch = kmalloc(4096, GFP_KERNEL)) || + !(ca->sb_read_scratch = (void *) __get_free_page(GFP_KERNEL)) || bch2_dev_buckets_alloc(c, ca) || bioset_init(&ca->replica_set, 4, offsetof(struct bch_write_bio, bio), 0) ||