Re: [RFC PATCH] lightnvm: expose configuration through sysfs

From: Matias BjÃrling
Date: Wed Apr 27 2016 - 14:20:41 EST




On 04/27/2016 07:41 PM, Greg KH wrote:
On Wed, Apr 27, 2016 at 10:18:57AM -0700, Simon A. F. Lund wrote:
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -174,6 +174,7 @@ struct nvm_id_group {
u16 cpar;

struct nvm_id_lp_tbl lptbl;
+ struct kobject kobj;
};

struct nvm_addr_format {
@@ -205,6 +206,7 @@ struct nvm_target {
struct list_head list;
struct nvm_tgt_type *type;
struct gendisk *disk;
+ struct kobject kobj;
};

struct nvm_tgt_instance {
@@ -360,6 +362,8 @@ struct nvm_dev {

struct mutex mlock;
spinlock_t lock;
+
+ struct kobject kobj;
};

static inline struct ppa_addr generic_to_dev_addr(struct nvm_dev *dev,

Never use "raw" kobjects in a driver for a device. You just guaranteed
that userspace tools will not see these devices or attributes, which
implies you didn't really test this using libudev :(

Please use real devices, attached to the real devices your disks already
have in the tree.

And are you sure you didn't just mess up your reference counting by
now having the lifecycle of these structures be dictated by the kobject?

thanks,

greg k-h


Hi Greg,

Thanks for the feedback.

lightnvm doesn't have anything to hook up with in the /dev/block/* until a device is exposed through a target. A device goes into a staging area, and then later is configured to expose a block device.

In the case of NVMe device driver, the driver brings up a device, identifies it as a lightnvm device, then calls nvm_register and registers the device. It skips the registration as a block device.

At the nvm_register point, the user can list the available devices through an ioctl, and then choose a target to put on top. The target will then expose it as a block device.

This might not be the ideal way. I like your input on what would be the proper way to expose such a device.

-Matias