Merge branch 'for-3.20/drivers' of git://git.kernel.dk/linux-block
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 12 Feb 2015 22:30:53 +0000 (14:30 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 12 Feb 2015 22:30:53 +0000 (14:30 -0800)
Pull block driver changes from Jens Axboe:
 "This contains:

   - The 4k/partition fixes for brd from Boaz/Matthew.

   - A few xen front/back block fixes from David Vrabel and Roger Pau
     Monne.

   - Floppy changes from Takashi, cleaning the device file creation.

   - Switching libata to use the new blk-mq tagging policy, removing
     code (and a suboptimal implementation) from libata.  This will
     throw you a merge conflict, since a bug in the original libata
     tagging code was fixed since this code was branched.  Trivial.
     From Shaohua.

   - Conversion of loop to blk-mq, from Ming Lei.

   - Cleanup of the io_schedule() handling in bsg from Peter Zijlstra.
     He claims it improves on unreadable code, which will cost him a
     beer.

   - Maintainer update or NDB, now handled by Markus Pargmann.

   - NVMe:
        - Optimization from me that avoids a kmalloc/kfree per IO for
          smaller (<= 8KB) IO. This cuts about 1% of high IOPS CPU
          overhead.
        - Removal of (now) dead RCU code, a relic from before NVMe was
          converted to blk-mq"

* 'for-3.20/drivers' of git://git.kernel.dk/linux-block:
  xen-blkback: default to X86_32 ABI on x86
  xen-blkfront: fix accounting of reqs when migrating
  xen-blkback,xen-blkfront: add myself as maintainer
  block: Simplify bsg complete all
  floppy: Avoid manual call of device_create_file()
  NVMe: avoid kmalloc/kfree for smaller IO
  MAINTAINERS: Update NBD maintainer
  libata: make sata_sil24 use fifo tag allocator
  libata: move sas ata tag allocation to libata-scsi.c
  libata: use blk taging
  NVMe: within nvme_free_queues(), delete RCU sychro/deferred free
  null_blk: suppress invalid partition info
  brd: Request from fdisk 4k alignment
  brd: Fix all partitions BUGs
  axonram: Fix bug in direct_access
  loop: add blk-mq.h include
  block: loop: don't handle REQ_FUA explicitly
  block: loop: introduce lo_discard() and lo_req_flush()
  block: loop: say goodby to bio
  block: loop: improve performance via blk-mq

1  2 
MAINTAINERS
drivers/ata/libata-core.c
drivers/ata/libata-scsi.c
drivers/ata/libata.h
drivers/ata/sata_sil24.c
drivers/block/nvme-core.c
drivers/block/xen-blkback/common.h
include/linux/libata.h
include/linux/wait.h

diff --cc MAINTAINERS
Simple merge
Simple merge
index 280729325ebda91c51ada53d7e2c7f1bf3c16be0,59c9d721b347ca859b510da449bcf203e5baf6bf..b061ba2c31d8f51408a15f2e019a3c328e882815
@@@ -4230,3 -4231,28 +4233,31 @@@ int ata_sas_queuecmd(struct scsi_cmnd *
        return rc;
  }
  EXPORT_SYMBOL_GPL(ata_sas_queuecmd);
 -              tag = tag < max_queue ? tag : 0;
+ int ata_sas_allocate_tag(struct ata_port *ap)
+ {
+       unsigned int max_queue = ap->host->n_tags;
+       unsigned int i, tag;
+       for (i = 0, tag = ap->sas_last_tag + 1; i < max_queue; i++, tag++) {
++              if (ap->flags & ATA_FLAG_LOWTAG)
++                      tag = 1;
++              else
++                      tag = tag < max_queue ? tag : 0;
+               /* the last tag is reserved for internal command. */
+               if (tag == ATA_TAG_INTERNAL)
+                       continue;
+               if (!test_and_set_bit(tag, &ap->sas_tag_allocated)) {
+                       ap->sas_last_tag = tag;
+                       return tag;
+               }
+       }
+       return -1;
+ }
+ void ata_sas_free_tag(unsigned int tag, struct ata_port *ap)
+ {
+       clear_bit(tag, &ap->sas_tag_allocated);
+ }
Simple merge
Simple merge
index d826bf3e62c8621e8572ca9eabb7951d42c33eb7,3eaa0becc52dfc0293f40c4ec70ca6e3baec66c2..cbdfbbf983927e85a4a83d94d20047f2fadf6357
@@@ -215,9 -244,21 +244,22 @@@ static void nvme_set_info(struct nvme_c
        cmd->fn = handler;
        cmd->ctx = ctx;
        cmd->aborted = 0;
 +      blk_mq_start_request(blk_mq_rq_from_pdu(cmd));
  }
  
+ static void *iod_get_private(struct nvme_iod *iod)
+ {
+       return (void *) (iod->private & ~0x1UL);
+ }
+ /*
+  * If bit 0 is set, the iod is embedded in the request payload.
+  */
+ static bool iod_should_kfree(struct nvme_iod *iod)
+ {
+       return (iod->private & 0x01) == 0;
+ }
  /* Special values must be less than 0x1000 */
  #define CMD_CTX_BASE          ((void *)POISON_POINTER_DELTA)
  #define CMD_CTX_CANCELLED     (0x30C + CMD_CTX_BASE)
Simple merge
Simple merge
Simple merge