Skip to content
  1. Mar 15, 2022
  2. Mar 14, 2022
  3. Mar 11, 2022
  4. Mar 09, 2022
  5. Mar 06, 2022
    • Jens Axboe's avatar
      Merge branch 'for-next' of... · a7637069
      Jens Axboe authored
      Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/colyli/linux-bcache into for-5.18/drivers
      
      Pull bcache updates from Coly:
      
      "We have 2 patches for Linux v5.18, both of them are from Mingzhe Zou.
       The first patch improves bcache initialization speed by avoid
       unnecessary cost of cache consistency, the second one fixes a potential
       NULL pointer deference in bcache initialization time."
      
      * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/colyli/linux-bcache:
        bcache: fixup multiple threads crash
        bcache: fixup bcache_dev_sectors_dirty_add() multithreaded CPU false sharing
      a7637069
    • Mingzhe Zou's avatar
      bcache: fixup multiple threads crash · 887554ab
      Mingzhe Zou authored
      
      
      When multiple threads to check btree nodes in parallel, the main
      thread wait for all threads to stop or CACHE_SET_IO_DISABLE flag:
      
      wait_event_interruptible(check_state->wait,
                               atomic_read(&check_state->started) == 0 ||
                               test_bit(CACHE_SET_IO_DISABLE, &c->flags));
      
      However, the bch_btree_node_read and bch_btree_node_read_done
      maybe call bch_cache_set_error, then the CACHE_SET_IO_DISABLE
      will be set. If the flag already set, the main thread return
      error. At the same time, maybe some threads still running and
      read NULL pointer, the kernel will crash.
      
      This patch change the event wait condition, the main thread must
      wait for all threads to stop.
      
      Fixes: 8e710227 ("bcache: make bch_btree_check() to be multithreaded")
      Signed-off-by: default avatarMingzhe Zou <mingzhe.zou@easystack.cn>
      Cc: stable@vger.kernel.org # v5.7+
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      887554ab
    • Mingzhe Zou's avatar
      bcache: fixup bcache_dev_sectors_dirty_add() multithreaded CPU false sharing · 7b1002f7
      Mingzhe Zou authored
      
      
      When attaching a cached device (a.k.a backing device) to a cache
      device, bch_sectors_dirty_init() is called to count dirty sectors
      and stripes (see what bcache_dev_sectors_dirty_add() does) on the
      cache device.
      
      When bcache_dev_sectors_dirty_add() is called, set_bit(stripe,
      d->full_dirty_stripes) or clear_bit(stripe, d->full_dirty_stripes)
      operation will always be performed. In full_dirty_stripes, each 1bit
      represents stripe_size (8192) sectors (512B), so 1bit=4MB (8192*512),
      and each CPU cache line=64B=512bit=2048MB. When 20 threads process
      a cached disk with 100G dirty data, a single thread processes about
      23M at a time, and 20 threads total 460M. These full_dirty_stripes
      bits corresponding to the 460M data is likely to fall in the same CPU
      cache line. When one of these threads performs a set_bit or clear_bit
      operation, the same CPU cache line of other threads will become invalid
      and must read the full_dirty_stripes from the main memory again. Compared
      with single thread, the time of a bcache_dev_sectors_dirty_add()
      call is increased by about 50 times in our test (100G dirty data,
      20 threads, bcache_dev_sectors_dirty_add() is called more than
      20 million times).
      
      This patch tries to test_bit before set_bit or clear_bit operation.
      Therefore, a lot of force set and clear operations will be avoided,
      and most of bcache_dev_sectors_dirty_add() calls will only read CPU
      cache line.
      
      Signed-off-by: default avatarMingzhe Zou <mingzhe.zou@easystack.cn>
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      7b1002f7
  6. Mar 05, 2022
  7. Mar 03, 2022
    • Jens Axboe's avatar
      Merge tag 'nvme-5.18-2022-03-03' of git://git.infradead.org/nvme into for-5.18/drivers · c48d8c5c
      Jens Axboe authored
      Pull NVMe updates from Christoph:
      
      "nvme updates for Linux 5.18
      
       - add vectored-io support for user-passthrough (Kanchan Joshi)
       - add verbose error logging (Alan Adamson)
       - support buffered I/O on block devices in nvmet (Chaitanya Kulkarni)
       - central discovery controller support (Martin Belanger)
       - fix and extended the globally unique idenfier validation (me)
       - move away from the deprecated IDA APIs (Sagi Grimberg)
       - misc code cleanup (Keith Busch, Max Gurtovoy, Qinghua Jin,
         Chaitanya Kulkarni)"
      
      * tag 'nvme-5.18-2022-03-03' of git://git.infradead.org/nvme: (27 commits)
        nvme: check that EUI/GUID/UUID are globally unique
        nvme: check for duplicate identifiers earlier
        nvme: fix the check for duplicate unique identifiers
        nvme: cleanup __nvme_check_ids
        nvme: remove nssa from struct nvme_ctrl
        nvme: explicitly set non-error for directives
        nvme: expose cntrltype and dctype through sysfs
        nvme: send uevent on connection up
        nvme: add vectored-io support for user-passthrough
        nvme: add verbose error logging
        nvme: add a helper to initialize connect_q
        nvme-rdma: add helpers for mapping/unmapping request
        nvmet-tcp: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvmet-rdma: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvmet-fc: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvmet: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvme-fc: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvme: replace ida_simple[get|remove] with the simler ida_[alloc|free]
        nvmet: allow bdev in buffered_io mode
        nvmet: use i_size_read() to set size for file-ns
        ...
      c48d8c5c
  8. Feb 28, 2022