]> Git Repo - linux.git/commitdiff
Merge tag 'for-linus-20180413' of git://git.kernel.dk/linux-block
authorLinus Torvalds <[email protected]>
Fri, 13 Apr 2018 22:15:15 +0000 (15:15 -0700)
committerLinus Torvalds <[email protected]>
Fri, 13 Apr 2018 22:15:15 +0000 (15:15 -0700)
Pull block fixes from Jens Axboe:
 "Followup fixes for this merge window. This contains:

   - Series from Ming, fixing corner cases in our CPU <-> queue mapping.

     This triggered repeated warnings on especially s390, but I also hit
     it in cpu hot plug/unplug testing while doing IO on NVMe on x86-64.

   - Another fix from Ming, ensuring that we always order budget and
     driver tag identically, avoiding a deadlock on QD=1 devices.

   - Loop locking regression fix from this merge window, from Omar.

   - Another loop locking fix, this time missing an unlock, from Tetsuo
     Handa.

   - Fix for racing IO submission with device removal from Bart.

   - sr reference fix from me, fixing a case where disk change or
     getevents can race with device removal.

   - Set of nvme fixes by way of Keith, from various contributors"

* tag 'for-linus-20180413' of git://git.kernel.dk/linux-block: (28 commits)
  nvme: expand nvmf_check_if_ready checks
  nvme: Use admin command effects for admin commands
  nvmet: fix space padding in serial number
  nvme: check return value of init_srcu_struct function
  nvmet: Fix nvmet_execute_write_zeroes sector count
  nvme-pci: Separate IO and admin queue IRQ vectors
  nvme-pci: Remove unused queue parameter
  nvme-pci: Skip queue deletion if there are no queues
  nvme: target: fix buffer overflow
  nvme: don't send keep-alives to the discovery controller
  nvme: unexport nvme_start_keep_alive
  nvme-loop: fix kernel oops in case of unhandled command
  nvme: enforce 64bit offset for nvme_get_log_ext fn
  sr: get/drop reference to device in revalidate and check_events
  blk-mq: Revert "blk-mq: reimplement blk_mq_hw_queue_mapped"
  blk-mq: Avoid that submitting a bio concurrently with device removal triggers a crash
  backing: silence compiler warning using __printf
  blk-mq: remove code for dealing with remapping queue
  blk-mq: reimplement blk_mq_hw_queue_mapped
  blk-mq: don't check queue mapped in __blk_mq_delay_run_hw_queue()
  ...

1  2 
include/linux/backing-dev.h

index 09da0f1246995cf19c04ec35a25733a0119fb4ad,0e9c0f71f7260a91c91fb0695e27a648694ea7c6..f6be4b0b6c18d2b76308f1eac441a4e6c223f8ac
@@@ -28,6 -28,7 +28,7 @@@ void bdi_put(struct backing_dev_info *b
  
  __printf(2, 3)
  int bdi_register(struct backing_dev_info *bdi, const char *fmt, ...);
+ __printf(2, 0)
  int bdi_register_va(struct backing_dev_info *bdi, const char *fmt,
                    va_list args);
  int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
@@@ -175,7 -176,7 +176,7 @@@ static inline int wb_congested(struct b
  }
  
  long congestion_wait(int sync, long timeout);
 -long wait_iff_congested(struct pglist_data *pgdat, int sync, long timeout);
 +long wait_iff_congested(int sync, long timeout);
  
  static inline bool bdi_cap_synchronous_io(struct backing_dev_info *bdi)
  {
@@@ -329,7 -330,7 +330,7 @@@ static inline bool inode_to_wb_is_valid
   * @inode: inode of interest
   *
   * Returns the wb @inode is currently associated with.  The caller must be
 - * holding either @inode->i_lock, @inode->i_mapping->tree_lock, or the
 + * holding either @inode->i_lock, the i_pages lock, or the
   * associated wb's list_lock.
   */
  static inline struct bdi_writeback *inode_to_wb(const struct inode *inode)
  #ifdef CONFIG_LOCKDEP
        WARN_ON_ONCE(debug_locks &&
                     (!lockdep_is_held(&inode->i_lock) &&
 -                    !lockdep_is_held(&inode->i_mapping->tree_lock) &&
 +                    !lockdep_is_held(&inode->i_mapping->i_pages.xa_lock) &&
                      !lockdep_is_held(&inode->i_wb->list_lock)));
  #endif
        return inode->i_wb;
   * @lockedp: temp bool output param, to be passed to the end function
   *
   * The caller wants to access the wb associated with @inode but isn't
 - * holding inode->i_lock, mapping->tree_lock or wb->list_lock.  This
 + * holding inode->i_lock, the i_pages lock or wb->list_lock.  This
   * function determines the wb associated with @inode and ensures that the
   * association doesn't change until the transaction is finished with
   * unlocked_inode_to_wb_end().
@@@ -370,11 -371,11 +371,11 @@@ unlocked_inode_to_wb_begin(struct inod
        *lockedp = smp_load_acquire(&inode->i_state) & I_WB_SWITCH;
  
        if (unlikely(*lockedp))
 -              spin_lock_irq(&inode->i_mapping->tree_lock);
 +              xa_lock_irq(&inode->i_mapping->i_pages);
  
        /*
 -       * Protected by either !I_WB_SWITCH + rcu_read_lock() or tree_lock.
 -       * inode_to_wb() will bark.  Deref directly.
 +       * Protected by either !I_WB_SWITCH + rcu_read_lock() or the i_pages
 +       * lock.  inode_to_wb() will bark.  Deref directly.
         */
        return inode->i_wb;
  }
  static inline void unlocked_inode_to_wb_end(struct inode *inode, bool locked)
  {
        if (unlikely(locked))
 -              spin_unlock_irq(&inode->i_mapping->tree_lock);
 +              xa_unlock_irq(&inode->i_mapping->i_pages);
  
        rcu_read_unlock();
  }
This page took 0.067717 seconds and 4 git commands to generate.