mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
for-5.9/block-merge-20200804
-----BEGIN PGP SIGNATURE----- iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAl8pjAEQHGF4Ym9lQGtl cm5lbC5kawAKCRD301j7KXHgphuHEAC5hNAi99HLktAQ7qZy4cBqnGNKCrguFszq Kxiecp3Nrb9EnAPNWYG+QMO0kD9z8quML85beBaJNxN1PlOk9pawqFAd4ziFncFI ruZwIMP+oH/0OmPUA2a4ymrqu+rpyFvfsDL2RKJ9dirAt9fuv9W0RZM5g7Oz83Xi cNdPRn0tOhK0DTPxL4M1/NR2OutSgvKDfA5Et3IrDFl7+bJAEFqmSO8wOSdZtvFp KcR4O/DXnr5Wl6cPvzlvooQze8vGGJkXAyIKaC9cuBm/nlzMCBGG8kE0v3kRJ8Sc uSSFkC+P+OlktY4JwXN+mCacDUdVBiiL/uUs1zel6HmociBgh67mgyJ6AfQtGZry yVl9mj44qWZjAzCODv5KnuxlH+gBacdmjcQqwxsZ2P477gfNkxmBXgHeWdfzO9A/ zTUXaBDXg3VdYxQfD8zTWPkCwXYp+YG3SRb9pfrIWIiYuz2UECZTvl/8Upnacz2B POTf+6vcNDlILCtboVE0mKEYR0ckxqrbs0NQloQdmVOfXNyhLml9OrXmwJIffVtE pZ9g428c5bm44lIOiB2eW+QPsXo0s8GxqIrMtxzKsJ3WgFefwLiVDLJBqEt78jRJ RvpGUxrMLgWFubowH8yDmWV+Fp0NpqcqF+GU45z8nGC3OTS+i0ZvUFYgLM6a2uOf sv4bzDPDBg== =uMth -----END PGP SIGNATURE----- Merge tag 'for-5.9/block-merge-20200804' of git://git.kernel.dk/linux-block Pull block stacking updates from Jens Axboe: "The stacking related fixes depended on both the core block and drivers branches, so here's a topic branch with that change. Outside of that, a late fix from Johannes for zone revalidation" * tag 'for-5.9/block-merge-20200804' of git://git.kernel.dk/linux-block: block: don't do revalidate zones on invalid devices block: remove blk_queue_stack_limits block: remove bdev_stack_limits block: inherit the zoned characteristics in blk_stack_limits
This commit is contained in:
commit
060a72a268
@ -455,17 +455,6 @@ void blk_queue_io_opt(struct request_queue *q, unsigned int opt)
|
||||
}
|
||||
EXPORT_SYMBOL(blk_queue_io_opt);
|
||||
|
||||
/**
|
||||
* blk_queue_stack_limits - inherit underlying queue limits for stacked drivers
|
||||
* @t: the stacking driver (top)
|
||||
* @b: the underlying device (bottom)
|
||||
**/
|
||||
void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b)
|
||||
{
|
||||
blk_stack_limits(&t->limits, &b->limits, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(blk_queue_stack_limits);
|
||||
|
||||
/**
|
||||
* blk_stack_limits - adjust queue_limits for stacked devices
|
||||
* @t: the stacking driver limits (top device)
|
||||
@ -609,32 +598,11 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
||||
t->chunk_sectors = min_not_zero(t->chunk_sectors,
|
||||
b->chunk_sectors);
|
||||
|
||||
t->zoned = max(t->zoned, b->zoned);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(blk_stack_limits);
|
||||
|
||||
/**
|
||||
* bdev_stack_limits - adjust queue limits for stacked drivers
|
||||
* @t: the stacking driver limits (top device)
|
||||
* @bdev: the component block_device (bottom)
|
||||
* @start: first data sector within component device
|
||||
*
|
||||
* Description:
|
||||
* Merges queue limits for a top device and a block_device. Returns
|
||||
* 0 if alignment didn't change. Returns -1 if adding the bottom
|
||||
* device caused misalignment.
|
||||
*/
|
||||
int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
|
||||
sector_t start)
|
||||
{
|
||||
struct request_queue *bq = bdev_get_queue(bdev);
|
||||
|
||||
start += get_start_sect(bdev);
|
||||
|
||||
return blk_stack_limits(t, &bq->limits, start);
|
||||
}
|
||||
EXPORT_SYMBOL(bdev_stack_limits);
|
||||
|
||||
/**
|
||||
* disk_stack_limits - adjust queue limits for stacked drivers
|
||||
* @disk: MD/DM gendisk (top)
|
||||
@ -650,7 +618,8 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
|
||||
{
|
||||
struct request_queue *t = disk->queue;
|
||||
|
||||
if (bdev_stack_limits(&t->limits, bdev, offset >> 9) < 0) {
|
||||
if (blk_stack_limits(&t->limits, &bdev_get_queue(bdev)->limits,
|
||||
get_start_sect(bdev) + (offset >> 9)) < 0) {
|
||||
char top[BDEVNAME_SIZE], bottom[BDEVNAME_SIZE];
|
||||
|
||||
disk_name(disk, 0, top);
|
||||
|
@ -498,6 +498,9 @@ int blk_revalidate_disk_zones(struct gendisk *disk,
|
||||
if (WARN_ON_ONCE(!queue_is_mq(q)))
|
||||
return -EIO;
|
||||
|
||||
if (!get_capacity(disk))
|
||||
return -EIO;
|
||||
|
||||
/*
|
||||
* Ensure that all memory allocations in this context are done as if
|
||||
* GFP_NOIO was specified.
|
||||
|
@ -1250,7 +1250,7 @@ static void fixup_discard_if_not_supported(struct request_queue *q)
|
||||
|
||||
static void fixup_write_zeroes(struct drbd_device *device, struct request_queue *q)
|
||||
{
|
||||
/* Fixup max_write_zeroes_sectors after blk_queue_stack_limits():
|
||||
/* Fixup max_write_zeroes_sectors after blk_stack_limits():
|
||||
* if we can handle "zeroes" efficiently on the protocol,
|
||||
* we want to do that, even if our backend does not announce
|
||||
* max_write_zeroes_sectors itself. */
|
||||
@ -1361,7 +1361,7 @@ static void drbd_setup_queue_param(struct drbd_device *device, struct drbd_backi
|
||||
decide_on_write_same_support(device, q, b, o, disable_write_same);
|
||||
|
||||
if (b) {
|
||||
blk_queue_stack_limits(q, b);
|
||||
blk_stack_limits(&q->limits, &b->limits, 0);
|
||||
|
||||
if (q->backing_dev_info->ra_pages !=
|
||||
b->backing_dev_info->ra_pages) {
|
||||
|
@ -458,7 +458,8 @@ static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (bdev_stack_limits(limits, bdev, start) < 0)
|
||||
if (blk_stack_limits(limits, &q->limits,
|
||||
get_start_sect(bdev) + start) < 0)
|
||||
DMWARN("%s: adding target device %s caused an alignment inconsistency: "
|
||||
"physical_block_size=%u, logical_block_size=%u, "
|
||||
"alignment_offset=%u, start=%llu",
|
||||
@ -467,9 +468,6 @@ static int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
|
||||
q->limits.logical_block_size,
|
||||
q->limits.alignment_offset,
|
||||
(unsigned long long) start << SECTOR_SHIFT);
|
||||
|
||||
limits->zoned = blk_queue_zoned_model(q);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1528,22 +1526,6 @@ combine_limits:
|
||||
dm_device_name(table->md),
|
||||
(unsigned long long) ti->begin,
|
||||
(unsigned long long) ti->len);
|
||||
|
||||
/*
|
||||
* FIXME: this should likely be moved to blk_stack_limits(), would
|
||||
* also eliminate limits->zoned stacking hack in dm_set_device_limits()
|
||||
*/
|
||||
if (limits->zoned == BLK_ZONED_NONE && ti_limits.zoned != BLK_ZONED_NONE) {
|
||||
/*
|
||||
* By default, the stacked limits zoned model is set to
|
||||
* BLK_ZONED_NONE in blk_set_stacking_limits(). Update
|
||||
* this model using the first target model reported
|
||||
* that is not BLK_ZONED_NONE. This will be either the
|
||||
* first target device zoned model or the model reported
|
||||
* by the target .io_hints.
|
||||
*/
|
||||
limits->zoned = ti_limits.zoned;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2081,7 +2081,8 @@ static int __nvme_revalidate_disk(struct gendisk *disk, struct nvme_id_ns *id)
|
||||
#ifdef CONFIG_NVME_MULTIPATH
|
||||
if (ns->head->disk) {
|
||||
nvme_update_disk_info(ns->head->disk, ns, id);
|
||||
blk_queue_stack_limits(ns->head->disk->queue, ns->queue);
|
||||
blk_stack_limits(&ns->head->disk->queue->limits,
|
||||
&ns->queue->limits, 0);
|
||||
nvme_mpath_update_disk_size(ns->head->disk);
|
||||
}
|
||||
#endif
|
||||
|
@ -306,11 +306,14 @@ enum blk_queue_state {
|
||||
|
||||
/*
|
||||
* Zoned block device models (zoned limit).
|
||||
*
|
||||
* Note: This needs to be ordered from the least to the most severe
|
||||
* restrictions for the inheritance in blk_stack_limits() to work.
|
||||
*/
|
||||
enum blk_zoned_model {
|
||||
BLK_ZONED_NONE, /* Regular block device */
|
||||
BLK_ZONED_HA, /* Host-aware zoned block device */
|
||||
BLK_ZONED_HM, /* Host-managed zoned block device */
|
||||
BLK_ZONED_NONE = 0, /* Regular block device */
|
||||
BLK_ZONED_HA, /* Host-aware zoned block device */
|
||||
BLK_ZONED_HM, /* Host-managed zoned block device */
|
||||
};
|
||||
|
||||
struct queue_limits {
|
||||
@ -1136,11 +1139,8 @@ extern void blk_set_default_limits(struct queue_limits *lim);
|
||||
extern void blk_set_stacking_limits(struct queue_limits *lim);
|
||||
extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
||||
sector_t offset);
|
||||
extern int bdev_stack_limits(struct queue_limits *t, struct block_device *bdev,
|
||||
sector_t offset);
|
||||
extern void disk_stack_limits(struct gendisk *disk, struct block_device *bdev,
|
||||
sector_t offset);
|
||||
extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
|
||||
extern void blk_queue_update_dma_pad(struct request_queue *, unsigned int);
|
||||
extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
|
||||
extern void blk_queue_virt_boundary(struct request_queue *, unsigned long);
|
||||
|
Loading…
Reference in New Issue
Block a user