linux/drivers/md
Coly Li c954ac8d66 bcache: handle cache prio_buckets and disk_buckets properly for bucket size > 8MB
Similar to c->uuids, struct cache's prio_buckets and disk_buckets also
have the potential memory allocation failure during cache registration
if the bucket size > 8MB.

ca->prio_buckets can be stored on cache device in multiple buckets, its
in-memory space is allocated by kzalloc() interface but normally
allocated by alloc_pages() because the size > KMALLOC_MAX_CACHE_SIZE.

So allocation of ca->prio_buckets has the MAX_ORDER restriction too. If
the bucket size > 8MB, by default the page allocator will fail because
the page order > 11 (default MAX_ORDER value). ca->prio_buckets should
also use meta_bucket_bytes(), meta_bucket_pages() to decide its memory
size and use alloc_meta_bucket_pages() to allocate pages, to avoid the
allocation failure during cache set registration when bucket size > 8MB.

ca->disk_buckets is a single bucket size memory buffer, it is used to
iterate each bucket of ca->prio_buckets, and compose the bio based on
memory of ca->disk_buckets, then write ca->disk_buckets memory to cache
disk one-by-one for each bucket of ca->prio_buckets. ca->disk_buckets
should have in-memory size exact to the meta_bucket_pages(), this is the
size that ca->prio_buckets will be stored into each on-disk bucket.

This patch fixes the above issues and handle cache's prio_buckets and
disk_buckets properly for bucket size larger than 8MB.

Signed-off-by: Coly Li <colyli@suse.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2020-07-25 07:38:20 -06:00
..
bcache bcache: handle cache prio_buckets and disk_buckets properly for bucket size > 8MB 2020-07-25 07:38:20 -06:00
persistent-data treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
dm-bio-prison-v1.c
dm-bio-prison-v1.h
dm-bio-prison-v2.c
dm-bio-prison-v2.h
dm-bio-record.h dm bio record: save/restore bi_end_io and bi_integrity 2020-03-03 10:02:46 -05:00
dm-bufio.c - Largest change for this cycle is the DM zoned target's metadata 2020-06-05 15:45:03 -07:00
dm-builtin.c
dm-cache-background-tracker.c
dm-cache-background-tracker.h
dm-cache-block-types.h
dm-cache-metadata.c
dm-cache-metadata.h
dm-cache-policy-internal.h
dm-cache-policy-smq.c
dm-cache-policy.c
dm-cache-policy.h
dm-cache-target.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-clone-metadata.c dm clone metadata: Fix return type of dm_clone_nr_of_hydrated_regions() 2020-03-27 14:42:51 -04:00
dm-clone-metadata.h dm clone metadata: Fix return type of dm_clone_nr_of_hydrated_regions() 2020-03-27 14:42:51 -04:00
dm-clone-target.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-core.h
dm-crypt.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-delay.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-dust.c
dm-ebs-target.c dm ebs: use dm_bufio_forget_buffers 2020-06-05 14:59:42 -04:00
dm-era-target.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-exception-store.c
dm-exception-store.h
dm-flakey.c
dm-historical-service-time.c dm mpath: add Historical Service Time Path Selector 2020-05-15 10:29:36 -04:00
dm-init.c
dm-integrity.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-io.c
dm-ioctl.c dm ioctl: use struct_size() helper in retrieve_deps() 2020-06-17 12:31:45 -04:00
dm-kcopyd.c
dm-linear.c dm,dax: Add dax zero_page_range operation 2020-04-02 19:15:03 -07:00
dm-log-userspace-base.c
dm-log-userspace-transfer.c
dm-log-userspace-transfer.h
dm-log-writes.c dm: replace zero-length array with flexible-array 2020-05-20 17:09:44 -04:00
dm-log.c
dm-mpath.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-mpath.h
dm-path-selector.c
dm-path-selector.h dm mpath: pass IO start time to path selector 2020-05-15 10:29:36 -04:00
dm-queue-length.c dm mpath: pass IO start time to path selector 2020-05-15 10:29:36 -04:00
dm-raid.c dm: replace zero-length array with flexible-array 2020-05-20 17:09:44 -04:00
dm-raid1.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-region-hash.c
dm-round-robin.c
dm-rq.c blk-mq: move failure injection out of blk_mq_complete_request 2020-06-24 09:15:57 -06:00
dm-rq.h
dm-service-time.c dm mpath: pass IO start time to path selector 2020-05-15 10:29:36 -04:00
dm-snap-persistent.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-snap-transient.c
dm-snap.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-stats.c dm: replace zero-length array with flexible-array 2020-05-20 17:09:44 -04:00
dm-stats.h
dm-stripe.c dm: replace zero-length array with flexible-array 2020-05-20 17:09:44 -04:00
dm-switch.c dm: replace zero-length array with flexible-array 2020-05-20 17:09:44 -04:00
dm-sysfs.c
dm-table.c dm: remove the make_request_fn check in device_area_is_invalid 2020-04-25 09:45:43 -06:00
dm-target.c
dm-thin-metadata.c dm thin metadata: fix lockdep complaint 2020-02-27 12:00:53 -05:00
dm-thin-metadata.h
dm-thin.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-uevent.c
dm-uevent.h
dm-unstripe.c
dm-verity-fec.c dm verity fec: fix hash block number in verity_fec_decode 2020-04-16 16:16:38 -04:00
dm-verity-fec.h
dm-verity-target.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
dm-verity-verify-sig.c
dm-verity-verify-sig.h
dm-verity.h
dm-writecache.c Linux 5.8-rc4 2020-07-08 08:02:13 -06:00
dm-zero.c
dm-zoned-metadata.c dm zoned: Fix reclaim zone selection 2020-06-19 12:29:39 -04:00
dm-zoned-reclaim.c dm zoned: fix uninitialized pointer dereference 2020-06-17 12:13:08 -04:00
dm-zoned-target.c Linux 5.8-rc4 2020-07-08 08:02:13 -06:00
dm-zoned.h dm zoned: select reclaim zone based on device index 2020-06-05 14:59:53 -04:00
dm.c Linux 5.8-rc4 2020-07-08 08:02:13 -06:00
dm.h
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile dm mpath: add Historical Service Time Path Selector 2020-05-15 10:29:36 -04:00
md-bitmap.c md: fix deadlock causing by sysfs_notify 2020-07-14 22:58:51 -07:00
md-bitmap.h
md-cluster.c md-cluster: fix wild pointer of unlock_all_bitmaps() 2020-07-14 23:38:32 -07:00
md-cluster.h
md-faulty.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
md-linear.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
md-linear.h md/raid1: Replace zero-length array with flexible-array 2020-05-13 12:02:23 -07:00
md-multipath.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
md-multipath.h
md.c md-cluster: fix rmmod issue when md_cluster convert bitmap to none 2020-07-21 17:30:37 -07:00
md.h md: fix deadlock causing by sysfs_notify 2020-07-14 22:58:51 -07:00
raid0.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
raid0.h
raid1-10.c
raid1.c block: rename generic_make_request to submit_bio_noacct 2020-07-01 07:27:24 -06:00
raid1.h md/raid1: Replace zero-length array with flexible-array 2020-05-13 12:02:23 -07:00
raid5-cache.c md/raid456: convert macro STRIPE_* to RAID5_STRIPE_* 2020-07-21 17:18:12 -07:00
raid5-log.h
raid5-ppl.c md/raid456: convert macro STRIPE_* to RAID5_STRIPE_* 2020-07-21 17:18:12 -07:00
raid5.c md/raid5: use do_div() for 64 bit divisions in raid5_sync_request 2020-07-22 22:49:46 -07:00
raid5.h md/raid5: set default stripe_size as 4096 2020-07-21 17:18:17 -07:00
raid10.c md/raid10: avoid deadlock on recovery. 2020-07-22 11:44:54 -07:00
raid10.h md/raid1: Replace zero-length array with flexible-array 2020-05-13 12:02:23 -07:00