mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 09:13:55 +08:00
lightnvm: disable interleaved metadata
Currently pblk only check the size of I/O metadata and does not take into account if this metadata is in a separate buffer or interleaved in a single metadata buffer. In reality only the first scenario is supported, where second mode will break pblk functionality during any IO operation. This patch prevents pblk to be instantiated in case device only supports interleaved metadata. Reviewed-by: Javier González <javier@cnexlabs.com> Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
24828d0536
commit
a16816b9e4
@ -1175,6 +1175,12 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
if (geo->ext) {
|
||||
pblk_err(pblk, "extended metadata not supported\n");
|
||||
kfree(pblk);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
spin_lock_init(&pblk->resubmit_lock);
|
||||
spin_lock_init(&pblk->trans_lock);
|
||||
spin_lock_init(&pblk->lock);
|
||||
|
@ -990,6 +990,7 @@ int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node)
|
||||
geo = &dev->geo;
|
||||
geo->csecs = 1 << ns->lba_shift;
|
||||
geo->sos = ns->ms;
|
||||
geo->ext = ns->ext;
|
||||
|
||||
dev->q = q;
|
||||
memcpy(dev->name, disk_name, DISK_NAME_LEN);
|
||||
|
@ -357,6 +357,7 @@ struct nvm_geo {
|
||||
u32 clba; /* sectors per chunk */
|
||||
u16 csecs; /* sector size */
|
||||
u16 sos; /* out-of-band area size */
|
||||
bool ext; /* metadata in extended data buffer */
|
||||
|
||||
/* device write constrains */
|
||||
u32 ws_min; /* minimum write size */
|
||||
|
Loading…
Reference in New Issue
Block a user