aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/core.c
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2017-01-31 07:17:20 -0500
committerJens Axboe <axboe@fb.com>2017-01-31 10:32:13 -0500
commit9a69b0ed6257ae5e71c99bf21ce53f98c558476a (patch)
tree8f414b478b2a105851af285af7f2861e1a77aa24 /drivers/lightnvm/core.c
parentdeccf5a52ea59843f5575cb49fe532c7cb8801e4 (diff)
lightnvm: allow targets to use sysfs
In order to register through the sysfs interface, a driver needs to know its kobject. On a disk structure, this happens when the partition information is added (device_add_disk), which for lightnvm takes place after the target has been initialized. This means that on target initialization, the kboject has not been created yet. This patch adds a target function to let targets initialize their own kboject as a child of the disk kobject. Signed-off-by: Javier González <javier@cnexlabs.com> Added exit typedef and passed gendisk instead of void pointer for exit. 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.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index b2cd3d6f2a31..9bfe0352d093 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -289,6 +289,9 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
289 set_capacity(tdisk, tt->capacity(targetdata)); 289 set_capacity(tdisk, tt->capacity(targetdata));
290 add_disk(tdisk); 290 add_disk(tdisk);
291 291
292 if (tt->sysfs_init && tt->sysfs_init(tdisk))
293 goto err_sysfs;
294
292 t->type = tt; 295 t->type = tt;
293 t->disk = tdisk; 296 t->disk = tdisk;
294 t->dev = tgt_dev; 297 t->dev = tgt_dev;
@@ -298,6 +301,9 @@ static int nvm_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create)
298 mutex_unlock(&dev->mlock); 301 mutex_unlock(&dev->mlock);
299 302
300 return 0; 303 return 0;
304err_sysfs:
305 if (tt->exit)
306 tt->exit(targetdata);
301err_init: 307err_init:
302 put_disk(tdisk); 308 put_disk(tdisk);
303err_queue: 309err_queue:
@@ -320,6 +326,9 @@ static void __nvm_remove_target(struct nvm_target *t)
320 del_gendisk(tdisk); 326 del_gendisk(tdisk);
321 blk_cleanup_queue(q); 327 blk_cleanup_queue(q);
322 328
329 if (tt->sysfs_exit)
330 tt->sysfs_exit(tdisk);
331
323 if (tt->exit) 332 if (tt->exit)
324 tt->exit(tdisk->private_data); 333 tt->exit(tdisk->private_data);
325 334