Merge tag 'for-6.17/block-20250728' of git://git.kernel.dk/linux

Pull block updates from Jens Axboe:

 - MD pull request via Yu:
      - call del_gendisk synchronously (Xiao)
      - cleanup unused variable (John)
      - cleanup workqueue flags (Ryo)
      - fix faulty rdev can't be removed during resync (Qixing)

 - NVMe pull request via Christoph:
      - try PCIe function level reset on init failure (Keith Busch)
      - log TLS handshake failures at error level (Maurizio Lombardi)
      - pci-epf: do not complete commands twice if nvmet_req_init()
        fails (Rick Wertenbroek)
      - misc cleanups (Alok Tiwari)

 - Removal of the pktcdvd driver

   This has been more than a decade coming at this point, and some
   recently revealed breakages that had it causing issues even for cases
   where it isn't required made me re-pull the trigger on this one. It's
   known broken and nobody has stepped up to maintain the code

 - Series for ublk supporting batch commands, enabling the use of
   multishot where appropriate

 - Speed up ublk exit handling

 - Fix for the two-stage elevator fixing which could leak data

 - Convert NVMe to use the new IOVA based API

 - Increase default max transfer size to something more reasonable

 - Series fixing write operations on zoned DM devices

 - Add tracepoints for zoned block device operations

 - Prep series working towards improving blk-mq queue management in the
   presence of isolated CPUs

 - Don't allow updating of the block size of a loop device that is
   currently under exclusively ownership/open

 - Set chunk sectors from stacked device stripe size and use it for the
   atomic write size limit

 - Switch to folios in bcache read_super()

 - Fix for CD-ROM MRW exit flush handling

 - Various tweaks, fixes, and cleanups

* tag 'for-6.17/block-20250728' of git://git.kernel.dk/linux: (94 commits)
  block: restore two stage elevator switch while running nr_hw_queue update
  cdrom: Call cdrom_mrw_exit from cdrom_release function
  sunvdc: Balance device refcount in vdc_port_mpgroup_check
  nvme-pci: try function level reset on init failure
  dm: split write BIOs on zone boundaries when zone append is not emulated
  block: use chunk_sectors when evaluating stacked atomic write limits
  dm-stripe: limit chunk_sectors to the stripe size
  md/raid10: set chunk_sectors limit
  md/raid0: set chunk_sectors limit
  block: sanitize chunk_sectors for atomic write limits
  ilog2: add max_pow_of_two_factor()
  nvmet: pci-epf: Do not complete commands twice if nvmet_req_init() fails
  nvme-tcp: log TLS handshake failures at error level
  docs: nvme: fix grammar in nvme-pci-endpoint-target.rst
  nvme: fix typo in status code constant for self-test in progress
  nvmet: remove redundant assignment of error code in nvmet_ns_enable()
  nvme: fix incorrect variable in io cqes error message
  nvme: fix multiple spelling and grammar issues in host drivers
  block: fix blk_zone_append_update_request_bio() kernel-doc
  md/raid10: fix set but not used variable in sync_request_write()
  ...
This commit is contained in:
Linus Torvalds
2025-07-28 16:43:54 -07:00
81 changed files with 2013 additions and 4453 deletions

View File

@@ -846,6 +846,55 @@ static inline unsigned int disk_nr_zones(struct gendisk *disk)
{
return disk->nr_zones;
}
/**
* bio_needs_zone_write_plugging - Check if a BIO needs to be handled with zone
* write plugging
* @bio: The BIO being submitted
*
* Return true whenever @bio execution needs to be handled through zone
* write plugging (using blk_zone_plug_bio()). Return false otherwise.
*/
static inline bool bio_needs_zone_write_plugging(struct bio *bio)
{
enum req_op op = bio_op(bio);
/*
* Only zoned block devices have a zone write plug hash table. But not
* all of them have one (e.g. DM devices may not need one).
*/
if (!bio->bi_bdev->bd_disk->zone_wplugs_hash)
return false;
/* Only write operations need zone write plugging. */
if (!op_is_write(op))
return false;
/* Ignore empty flush */
if (op_is_flush(bio->bi_opf) && !bio_sectors(bio))
return false;
/* Ignore BIOs that already have been handled by zone write plugging. */
if (bio_flagged(bio, BIO_ZONE_WRITE_PLUGGING))
return false;
/*
* All zone write operations must be handled through zone write plugging
* using blk_zone_plug_bio().
*/
switch (op) {
case REQ_OP_ZONE_APPEND:
case REQ_OP_WRITE:
case REQ_OP_WRITE_ZEROES:
case REQ_OP_ZONE_FINISH:
case REQ_OP_ZONE_RESET:
case REQ_OP_ZONE_RESET_ALL:
return true;
default:
return false;
}
}
bool blk_zone_plug_bio(struct bio *bio, unsigned int nr_segs);
/**
@@ -875,6 +924,12 @@ static inline unsigned int disk_nr_zones(struct gendisk *disk)
{
return 0;
}
static inline bool bio_needs_zone_write_plugging(struct bio *bio)
{
return false;
}
static inline bool blk_zone_plug_bio(struct bio *bio, unsigned int nr_segs)
{
return false;
@@ -1230,15 +1285,6 @@ enum blk_default_limits {
BLK_SEG_BOUNDARY_MASK = 0xFFFFFFFFUL,
};
/*
* Default upper limit for the software max_sectors limit used for
* regular file system I/O. This can be increased through sysfs.
*
* Not to be confused with the max_hw_sector limit that is entirely
* controlled by the driver, usually based on hardware limits.
*/
#define BLK_DEF_MAX_SECTORS_CAP 2560u
static inline struct queue_limits *bdev_limits(struct block_device *bdev)
{
return &bdev_get_queue(bdev)->limits;