[PATCH] nvme: block ioctls if controller not in a live state

Christoph Hellwig hch at infradead.org
Mon May 14 07:53:18 PDT 2018


On Mon, May 14, 2018 at 07:47:46AM -0700, James Smart wrote:
> 
> 
> On 5/14/2018 7:17 AM, Christoph Hellwig wrote:
> > On Wed, May 09, 2018 at 09:29:13AM -0700, James Smart wrote:
> > > That is the exact intent.  I do want the app to trigger off -EAGAIN in those
> > > two states and try again after a delay./  Perhaps I should change from !LIVE
> > > to NEW || RESETTING || CONNECTING to be more explicit.  I assumed !LIVE was
> > > sufficient as the other states should transition to LIVE or the delete path
> > > is taken which would remove the fd all together.
> > The problem is that userspace reasonably expects to be able to call
> > poll/select when used on a character device and it gets -EAGAIN.
> 
> What's stopping us from adding poll support to the dev node ?

A volunteer to write the code.

> 
> > 
> > Maybe the right solution here is to just do a wait_event_interruptible to
> > wait for the controller being live.
> 
> That's doable. I don't like hanging the app up for what could be 60s or so
> though (controller loss timeout).

Then you need to poll.  We should only do that if opened with O_NONBLOCK
and otherwise wait for the event, similar to the pattern used in a lot
of character devices.



More information about the Linux-nvme mailing list