diff options
| author | Jens Axboe <axboe@kernel.dk> | 2019-07-11 08:12:31 -0600 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2019-07-11 08:12:31 -0600 |
| commit | b7403066070d96fa3db23a4df6910f15c46ffc6d (patch) | |
| tree | fc2e1400595e7127a8590aa5f43d41263eb760d2 /drivers/nvme/target/io-cmd-bdev.c | |
| parent | 4ddeaae8903d703201e493e2d19dc9ac9acf2c76 (diff) | |
| parent | 420dc733f980246f2179e0144f9cedab9ad4a91e (diff) | |
| download | linux-b7403066070d96fa3db23a4df6910f15c46ffc6d.tar.gz linux-b7403066070d96fa3db23a4df6910f15c46ffc6d.tar.bz2 linux-b7403066070d96fa3db23a4df6910f15c46ffc6d.zip | |
Merge branch 'nvme-5.3' of git://git.infradead.org/nvme into for-linus
Pull NVMe fixes from Christoph:
"Lof of fixes all over the place, and two very minor features that
were in the nvme tree by the end of the merge window, but hadn't made
it out to Jens yet."
* 'nvme-5.3' of git://git.infradead.org/nvme:
nvme: fix regression upon hot device removal and insertion
nvme-fc: fix module unloads while lports still pending
nvme-tcp: don't use sendpage for SLAB pages
nvme-tcp: set the STABLE_WRITES flag when data digests are enabled
nvmet: print a hint while rejecting NSID 0 or 0xffffffff
nvme-multipath: do not select namespaces which are about to be removed
nvme-multipath: also check for a disabled path if there is a single sibling
nvme-multipath: factor out a nvme_path_is_disabled helper
nvme: set physical block size and optimal I/O size
nvme: add I/O characteristics fields
nvmet: export I/O characteristics attributes in Identify
nvme-trace: add delete completion and submission queue to admin cmds tracer
nvme-trace: fix spelling mistake "spcecific" -> "specific"
nvme-pci: limit max_hw_sectors based on the DMA max mapping size
nvme-pci: check for NULL return from pci_alloc_p2pmem()
nvme-pci: don't create a read hctx mapping without read queues
nvme-pci: don't fall back to a 32-bit DMA mask
nvme-pci: make nvme_dev_pm_ops static
nvme-fcloop: resolve warnings on RCU usage and sleep warnings
nvme-fcloop: fix inconsistent lock state warnings
Diffstat (limited to 'drivers/nvme/target/io-cmd-bdev.c')
| -rw-r--r-- | drivers/nvme/target/io-cmd-bdev.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/nvme/target/io-cmd-bdev.c b/drivers/nvme/target/io-cmd-bdev.c index 7a1cf6437a6a..de0bff70ebb6 100644 --- a/drivers/nvme/target/io-cmd-bdev.c +++ b/drivers/nvme/target/io-cmd-bdev.c @@ -8,6 +8,45 @@ #include <linux/module.h> #include "nvmet.h" +void nvmet_bdev_set_limits(struct block_device *bdev, struct nvme_id_ns *id) +{ + const struct queue_limits *ql = &bdev_get_queue(bdev)->limits; + /* Number of physical blocks per logical block. */ + const u32 ppl = ql->physical_block_size / ql->logical_block_size; + /* Physical blocks per logical block, 0's based. */ + const __le16 ppl0b = to0based(ppl); + + /* + * For NVMe 1.2 and later, bit 1 indicates that the fields NAWUN, + * NAWUPF, and NACWU are defined for this namespace and should be + * used by the host for this namespace instead of the AWUN, AWUPF, + * and ACWU fields in the Identify Controller data structure. If + * any of these fields are zero that means that the corresponding + * field from the identify controller data structure should be used. + */ + id->nsfeat |= 1 << 1; + id->nawun = ppl0b; + id->nawupf = ppl0b; + id->nacwu = ppl0b; + + /* + * Bit 4 indicates that the fields NPWG, NPWA, NPDG, NPDA, and + * NOWS are defined for this namespace and should be used by + * the host for I/O optimization. + */ + id->nsfeat |= 1 << 4; + /* NPWG = Namespace Preferred Write Granularity. 0's based */ + id->npwg = ppl0b; + /* NPWA = Namespace Preferred Write Alignment. 0's based */ + id->npwa = id->npwg; + /* NPDG = Namespace Preferred Deallocate Granularity. 0's based */ + id->npdg = to0based(ql->discard_granularity / ql->logical_block_size); + /* NPDG = Namespace Preferred Deallocate Alignment */ + id->npda = id->npdg; + /* NOWS = Namespace Optimal Write Size */ + id->nows = to0based(ql->io_opt / ql->logical_block_size); +} + int nvmet_bdev_ns_enable(struct nvmet_ns *ns) { int ret; |
