[PATCH] NVMe: Do not save result for range type feature

Busch, Keith keith.busch at intel.com
Wed Apr 3 17:45:09 EDT 2013


On Wed, 3 Apr 2013, Matthew Wilcox wrote:
> 
> > On Tue, Apr 02, 2013 at 02:31:35PM -0600, Keith Busch wrote:
> >> The LBA range type feature being optional, we do not want to save
> the
> >> result or propagate it up the call stack when a device does not
> >> support it.
> >
> > Looking at the whole function, the description of what it returns is
> > rather odd.  "If nvme_setup_io_queues fails, returns that error.
> > If nvme_identify for the controller fails, returns -EIO.  Otherwise,
> > return an error if nvme_identify for the last namespace fails or if
> > nvme_get_features for the last namespace fails."
> >
> > So we always discard errors for not-the-last namespace, but return an
> > error if identify or get_features for the last namespace gets an
> error.
> > Worse, on returning an error, the caller will free the queues and all
> > the controller structures, even though the namespaces have been
> > registered as devices!  I really didn't think through the error path
> > here, did I?  :-)
> >
> > So, I would propose that we _always_ discard any errors we hit going
> > through the namespace addition loop.  As long as we've been able to
> > set up queues and identify the controller, this function should
> return success.
> >
> > And I think *that* patch is as simple as adding:
> >
> >                        list_add_tail(&ns->list, &dev->namespaces);
> >        }
> > +	res = 0;
> >        list_for_each_entry(ns, &dev->namespaces, list)
> >                add_disk(ns->disk);
> >
> > What do you think?
 
Great idea! Better than waiting for each possible failure to occur and
have a bunch of patches to fix essentially the same problem. :)



More information about the Linux-nvme mailing list