On Wed, Sep 05, 2018 at 03:32:03PM +0200, Hannes Reinecke wrote:
> On 09/05/2018 03:18 PM, Christoph Hellwig wrote:
> > On Wed, Sep 05, 2018 at 09:00:50AM +0200, Hannes Reinecke wrote:
> >> We should be registering the ns_id attribute as default sysfs
> >> attribute groups, otherwise we have a race condition between
> >> the uevent and the attributes appearing in sysfs.
> > 
> > Please give Bart credit for his work, as the lightnvm bits are almost
> > bigger than the rest.
> > 
> Okay, will be doing so.
> 
> >> +static umode_t nvm_dev_attrs_visible(struct kobject *kobj,
> >> +                               struct attribute *attr, int index)
> >>  {
> >> +  struct device *dev = container_of(kobj, struct device, kobj);
> >> +  struct gendisk *disk = dev_to_disk(dev);
> >> +  struct nvme_ns *ns = disk->private_data;
> >>    struct nvm_dev *ndev = ns->ndev;
> >> +  struct device_attribute *dev_attr =
> >> +          container_of(attr, typeof(*dev_attr), attr);
> >>  
> >> +  if (dev_attr->show == nvm_dev_attr_show)
> >> +          return attr->mode;
> >>  
> >> +  switch (ndev ? ndev->geo.major_ver_id : 0) {
> > 
> > How could ndev be zero here?
> > 
> For 'normal' NVMe devices (ie non-lightnvm). As we now register all
> sysfs attributes (including the lightnvm ones) per default we'll need to
> blank them out for non-lightnvm devices.

But then we need to exit early at the beginning of the function,
as we should not register attributes using nvm_dev_attr_show (or
anything else for that matter) either.

Reply via email to