aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/core.c
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2017-04-15 14:55:45 -0400
committerJens Axboe <axboe@fb.com>2017-04-16 12:06:25 -0400
commit4af3f75d7992dd0dc49da95fbc039fa3806fba4f (patch)
treec180773ceb2e5e1b3ca1edd06a9cc84c41525f3d /drivers/lightnvm/core.c
parente85292feb98ca8ba4dcd6b5d33e1214a4b54512d (diff)
lightnvm: allow to init targets on factory mode
Target initialization has two responsibilities: creating the target partition and instantiating the target. This patch enables to create a factory partition (e.g., do not trigger recovery on the given target). This is useful for target development and for being able to restore the device state at any moment in time without requiring a full-device erase. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <matias@cnexlabs.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/lightnvm/core.c')
-rw-r--r--drivers/lightnvm/core.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 5f84d2a418f6..a63b563b1a8a 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -280,7 +280,7 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
280 tdisk->fops = &nvm_fops; 280 tdisk->fops = &nvm_fops;
281 tdisk->queue = tqueue; 281 tdisk->queue = tqueue;
282 282
283 targetdata = tt->init(tgt_dev, tdisk); 283 targetdata = tt->init(tgt_dev, tdisk, create->flags);
284 if (IS_ERR(targetdata)) 284 if (IS_ERR(targetdata))
285 goto err_init; 285 goto err_init;
286 286
@@ -1244,8 +1244,16 @@ static long nvm_ioctl_dev_create(struct file *file, void __user *arg)
1244 create.tgtname[DISK_NAME_LEN - 1] = '\0'; 1244 create.tgtname[DISK_NAME_LEN - 1] = '\0';
1245 1245
1246 if (create.flags != 0) { 1246 if (create.flags != 0) {
1247 pr_err("nvm: no flags supported\n"); 1247 __u32 flags = create.flags;
1248 return -EINVAL; 1248
1249 /* Check for valid flags */
1250 if (flags & NVM_TARGET_FACTORY)
1251 flags &= ~NVM_TARGET_FACTORY;
1252
1253 if (flags) {
1254 pr_err("nvm: flag not supported\n");
1255 return -EINVAL;
1256 }
1249 } 1257 }
1250 1258
1251 return __nvm_configure_create(&create); 1259 return __nvm_configure_create(&create);