From: Linus Torvalds Date: Thu, 12 Feb 2015 22:30:53 +0000 (-0800) Subject: Merge branch 'for-3.20/drivers' of git://git.kernel.dk/linux-block X-Git-Tag: v4.0-rc1~100 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=8494bcf5b7c4b2416687e233dd34d4c6b6fe5653;p=uclinux-h8%2Flinux.git Merge branch 'for-3.20/drivers' of git://git.kernel.dk/linux-block 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 --- 8494bcf5b7c4b2416687e233dd34d4c6b6fe5653 diff --cc drivers/ata/libata-scsi.c index 280729325ebd,59c9d721b347..b061ba2c31d8 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@@ -4230,3 -4231,28 +4233,31 @@@ int ata_sas_queuecmd(struct scsi_cmnd * return rc; } EXPORT_SYMBOL_GPL(ata_sas_queuecmd); + + 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++) { - tag = tag < max_queue ? tag : 0; ++ 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); + } diff --cc drivers/block/nvme-core.c index d826bf3e62c8,3eaa0becc52d..cbdfbbf98392 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c @@@ -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)