Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NVMe: Reread partitions on metadata formats

This patch has the driver automatically reread partitions if a namespace
has a separate metadata format. Previously revalidating a disk was
sufficient to get the correct capacity set on such formatted drives,
but partitions that may exist would not have been surfaced.

Reported-by: Paul Grabinar <paul.grabinar@ranbarg.com>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Tested-by: Paul Grabinar <paul.grabinar@ranbarg.com>
Signed-off-by: Jens Axboe <axboe@fb.com>

authored by

Keith Busch and committed by
Jens Axboe
7bee6074 77b5a084

+11 -2
+11 -2
drivers/block/nvme-core.c
··· 2108 2108 goto out_free_disk; 2109 2109 2110 2110 add_disk(ns->disk); 2111 - if (ns->ms) 2112 - revalidate_disk(ns->disk); 2111 + if (ns->ms) { 2112 + struct block_device *bd = bdget_disk(ns->disk, 0); 2113 + if (!bd) 2114 + return; 2115 + if (blkdev_get(bd, FMODE_READ, NULL)) { 2116 + bdput(bd); 2117 + return; 2118 + } 2119 + blkdev_reread_part(bd); 2120 + blkdev_put(bd, FMODE_READ); 2121 + } 2113 2122 return; 2114 2123 out_free_disk: 2115 2124 kfree(disk);