Thread (22 messages) 22 messages, 4 authors, 2020-04-28

Re: [PATCH v8 04/11] block: Introduce REQ_OP_ZONE_APPEND

From: Hannes Reinecke <hare@suse.de>
Date: 2020-04-27 12:31:04
Also in: linux-fsdevel, linux-scsi

On 4/27/20 1:31 PM, Johannes Thumshirn wrote:
From: Keith Busch <kbusch@kernel.org>

Define REQ_OP_ZONE_APPEND to append-write sectors to a zone of a zoned
block device. This is a no-merge write operation.

A zone append write BIO must:
* Target a zoned block device
* Have a sector position indicating the start sector of the target zone
* The target zone must be a sequential write zone
* The BIO must not cross a zone boundary
* The BIO size must not be split to ensure that a single range of LBAs
   is written with a single command.

Implement these checks in generic_make_request_checks() using the
helper function blk_check_zone_append(). To avoid write append BIO
splitting, introduce the new max_zone_append_sectors queue limit
attribute and ensure that a BIO size is always lower than this limit.
Export this new limit through sysfs and check these limits in bio_full().

Also when a LLDD can't dispatch a request to a specific zone, it
will return BLK_STS_ZONE_RESOURCE indicating this request needs to
be delayed, e.g.  because the zone it will be dispatched to is still
write-locked. If this happens set the request aside in a local list
to continue trying dispatching requests such as READ requests or a
WRITE/ZONE_APPEND requests targetting other zones. This way we can
still keep a high queue depth without starving other requests even if
one request can't be served due to zone write-locking.

Finally, make sure that the bio sector position indicates the actual
write position as indicated by the device on completion.

Signed-off-by: Keith Busch <kbusch@kernel.org>
[ jth: added zone-append specific add_page and merge_page helpers ]
Signed-off-by: Johannes Thumshirn <redacted>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
  block/bio.c               | 62 ++++++++++++++++++++++++++++++++++++---
  block/blk-core.c          | 52 ++++++++++++++++++++++++++++++++
  block/blk-mq.c            | 27 +++++++++++++++++
  block/blk-settings.c      | 23 +++++++++++++++
  block/blk-sysfs.c         | 13 ++++++++
  drivers/scsi/scsi_lib.c   |  1 +
  include/linux/blk_types.h | 14 +++++++++
  include/linux/blkdev.h    | 11 +++++++
  8 files changed, 199 insertions(+), 4 deletions(-)
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes


-- 
Dr. Hannes Reinecke            Teamlead Storage & Networking
hare@suse.de                               +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help