nvmet-file: clamp-down file namespace lba_shift
authorSagi Grimberg <sagi@grimberg.me>
Wed, 24 Apr 2019 18:43:23 +0000 (11:43 -0700)
committerChristoph Hellwig <hch@lst.de>
Thu, 25 Apr 2019 14:51:19 +0000 (16:51 +0200)
When the backing file is a tempfile for example, the inode i_blkbits
can be 1M in size which causes problems for hosts to support as the
disk block size. Instead, expose the minimum between i_blkbits and
12 (4K sector size).

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by:- Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/io-cmd-file.c

index bc6ebb5..05453f5 100644 (file)
@@ -49,7 +49,12 @@ int nvmet_file_ns_enable(struct nvmet_ns *ns)
                goto err;
 
        ns->size = stat.size;
                goto err;
 
        ns->size = stat.size;
-       ns->blksize_shift = file_inode(ns->file)->i_blkbits;
+       /*
+        * i_blkbits can be greater than the universally accepted upper bound,
+        * so make sure we export a sane namespace lba_shift.
+        */
+       ns->blksize_shift = min_t(u8,
+                       file_inode(ns->file)->i_blkbits, 12);
 
        ns->bvec_cache = kmem_cache_create("nvmet-bvec",
                        NVMET_MAX_MPOOL_BVEC * sizeof(struct bio_vec),
 
        ns->bvec_cache = kmem_cache_create("nvmet-bvec",
                        NVMET_MAX_MPOOL_BVEC * sizeof(struct bio_vec),