[PATCH 2/2] nvme: Expose cntrltype and dctype through sysfs.

Sagi Grimberg sagi at grimberg.me
Thu Feb 3 07:52:24 PST 2022


>> There is already an interface to update sysfs groups, so in theory
>> this should do the trick:
>> --
>> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
>> index c11cd3a814fd..d86828cf7720 100644
>> --- a/drivers/nvme/host/core.c
>> +++ b/drivers/nvme/host/core.c
>> @@ -3115,6 +3115,11 @@ int nvme_init_ctrl_finish(struct nvme_ctrl *ctrl)
>>                           return ret;
>>           }
>>
>> +       ret = sysfs_update_groups(&ctrl->device->kobj,
>> ctrl->device->groups);
>> +       if (ret)
>> +               return ret;
>> +
>> +
> 
> I just tried this and it works.

Makes sense.

> Martin
> 
>>           ctrl->identified = true;
>>
>>           return 0;
>> --
>>
>> But probably we want add a nicer interface like
>> --
>> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
>> index c11cd3a814fd..8fb94cb15fb0 100644
>> --- a/drivers/nvme/host/core.c
>> +++ b/drivers/nvme/host/core.c
>> @@ -3115,6 +3115,11 @@ int nvme_init_ctrl_finish(struct nvme_ctrl *ctrl)
>>                           return ret;
>>           }
>>
>> +       ret = device_update_groups(&ctrl->device);
>> +       if (ret)
>> +               return ret;
>> +
>> +
>>           ctrl->identified = true;
>>
>>           return 0;
>> --
>>
>> Where device_update_groups would be something like:
>> --
>> int device_update_groups(struct device *dev)
>> {
>>           struct class *class = dev->class;
>>           const struct device_type *type = dev->type;
>>           int error;
>>
>>           if (class) {
>>                   error = device_update_groups(dev, class->dev_groups);
>>                   if (error)
>>                           return error;
>>           }
>>
>>           if (type) {
>>                   error = device_update_groups(dev, type->groups);
>>                   if (error)
>>                           goto err_remove_class_groups;
>>           }
>>
>>           error = device_update_groups(dev, dev->groups);
>>           if (error)
>>                   goto err_remove_type_groups;

This last hunk should probably be:
	return device_update_groups(dev, dev->groups);

>> }
>> EXPORT_SYMBOL_GPL(device_update_groups);
>> --
> 
> Sagi, would you add this function to drivers/base/core.c?
> Martin

Yes. This would need some more eyeballs though, maybe this
should be extended to device_update_attrs?



More information about the Linux-nvme mailing list