1. 28 10月, 2021 1 次提交
  2. 27 10月, 2021 1 次提交
    • D
      block: Add independent access ranges support · a2247f19
      Damien Le Moal 提交于
      The Concurrent Positioning Ranges VPD page (for SCSI) and data log page
      (for ATA) contain parameters describing the set of contiguous LBAs that
      can be served independently by a single LUN multi-actuator hard-disk.
      Similarly, a logically defined block device composed of multiple disks
      can in some cases execute requests directed at different sector ranges
      in parallel. A dm-linear device aggregating 2 block devices together is
      an example.
      
      This patch implements support for exposing a block device independent
      access ranges to the user through sysfs to allow optimizing device
      accesses to increase performance.
      
      To describe the set of independent sector ranges of a device (actuators
      of a multi-actuator HDDs or table entries of a dm-linear device),
      The type struct blk_independent_access_ranges is introduced. This
      structure describes the sector ranges using an array of
      struct blk_independent_access_range structures. This range structure
      defines the start sector and number of sectors of the access range.
      The ranges in the array cannot overlap and must contain all sectors
      within the device capacity.
      
      The function disk_set_independent_access_ranges() allows a device
      driver to signal to the block layer that a device has multiple
      independent access ranges.  In this case, a struct
      blk_independent_access_ranges is attached to the device request queue
      by the function disk_set_independent_access_ranges(). The function
      disk_alloc_independent_access_ranges() is provided for drivers to
      allocate this structure.
      
      struct blk_independent_access_ranges contains kobjects (struct kobject)
      to expose to the user through sysfs the set of independent access ranges
      supported by a device. When the device is initialized, sysfs
      registration of the ranges information is done from blk_register_queue()
      using the block layer internal function
      disk_register_independent_access_ranges(). If a driver calls
      disk_set_independent_access_ranges() for a registered queue, e.g. when a
      device is revalidated, disk_set_independent_access_ranges() will execute
      disk_register_independent_access_ranges() to update the sysfs attribute
      files.  The sysfs file structure created starts from the
      independent_access_ranges sub-directory and contains the start sector
      and number of sectors of each range, with the information for each range
      grouped in numbered sub-directories.
      
      E.g. for a dual actuator HDD, the user sees:
      
      $ tree /sys/block/sdk/queue/independent_access_ranges/
      /sys/block/sdk/queue/independent_access_ranges/
      |-- 0
      |   |-- nr_sectors
      |   `-- sector
      `-- 1
          |-- nr_sectors
          `-- sector
      
      For a regular device with a single access range, the
      independent_access_ranges sysfs directory does not exist.
      
      Device revalidation may lead to changes to this structure and to the
      attribute values. When manipulated, the queue sysfs_lock and
      sysfs_dir_lock mutexes are held for atomicity, similarly to how the
      blk-mq and elevator sysfs queue sub-directories are protected.
      
      The code related to the management of independent access ranges is
      added in the new file block/blk-ia-ranges.c.
      Signed-off-by: NDamien Le Moal <damien.lemoal@wdc.com>
      Reviewed-by: NHannes Reinecke <hare@suse.de>
      Reviewed-by: NMartin K. Petersen <martin.petersen@oracle.com>
      Reviewed-by: NKeith Busch <kbusch@kernel.org>
      Link: https://lore.kernel.org/r/20211027022223.183838-2-damien.lemoal@wdc.comSigned-off-by: NJens Axboe <axboe@kernel.dk>
      a2247f19
  3. 22 10月, 2021 1 次提交
    • E
      blk-crypto: rename blk_keyslot_manager to blk_crypto_profile · cb77cb5a
      Eric Biggers 提交于
      blk_keyslot_manager is misnamed because it doesn't necessarily manage
      keyslots.  It actually does several different things:
      
        - Contains the crypto capabilities of the device.
      
        - Provides functions to control the inline encryption hardware.
          Originally these were just for programming/evicting keyslots;
          however, new functionality (hardware-wrapped keys) will require new
          functions here which are unrelated to keyslots.  Moreover,
          device-mapper devices already (ab)use "keyslot_evict" to pass key
          eviction requests to their underlying devices even though
          device-mapper devices don't have any keyslots themselves (so it
          really should be "evict_key", not "keyslot_evict").
      
        - Sometimes (but not always!) it manages keyslots.  Originally it
          always did, but device-mapper devices don't have keyslots
          themselves, so they use a "passthrough keyslot manager" which
          doesn't actually manage keyslots.  This hack works, but the
          terminology is unnatural.  Also, some hardware doesn't have keyslots
          and thus also uses a "passthrough keyslot manager" (support for such
          hardware is yet to be upstreamed, but it will happen eventually).
      
      Let's stop having keyslot managers which don't actually manage keyslots.
      Instead, rename blk_keyslot_manager to blk_crypto_profile.
      
      This is a fairly big change, since for consistency it also has to update
      keyslot manager-related function names, variable names, and comments --
      not just the actual struct name.  However it's still a fairly
      straightforward change, as it doesn't change any actual functionality.
      
      Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # For MMC
      Reviewed-by: NMike Snitzer <snitzer@redhat.com>
      Reviewed-by: NMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Link: https://lore.kernel.org/r/20211018180453.40441-4-ebiggers@kernel.orgSigned-off-by: NJens Axboe <axboe@kernel.dk>
      cb77cb5a
  4. 20 10月, 2021 2 次提交
  5. 19 10月, 2021 4 次提交
  6. 18 10月, 2021 16 次提交
  7. 25 8月, 2021 1 次提交
  8. 24 8月, 2021 1 次提交
  9. 12 8月, 2021 1 次提交
  10. 10 8月, 2021 4 次提交
  11. 03 8月, 2021 2 次提交
  12. 31 7月, 2021 3 次提交
  13. 29 7月, 2021 3 次提交