Thread (34 messages) 34 messages, 6 authors, 2019-11-21

Re: [PATCH v2 6/8] bdev: add open_finish.

From: Michal Suchánek <hidden>
Date: 2019-10-24 08:55:22
Also in: linux-fsdevel, linux-scsi, lkml

On Wed, Oct 23, 2019 at 07:22:32PM -0700, Christoph Hellwig wrote:
On Wed, Oct 23, 2019 at 02:52:45PM +0200, Michal Suchanek wrote:
quoted
Opening a block device may require a long operation such as waiting for
the cdrom tray to close. Performing this operation with locks held locks
out other attempts to open the device. These processes waiting to open
the device are not killable.

To avoid this issue and still be able to perform time-consuming checks
at open() time the block device driver can provide open_finish(). If it
does opening the device proceeds even when an error is returned from
open(), bd_mutex is released and open_finish() is called. If
open_finish() succeeds the device is now open, if it fails release() is
called.

When -ERESTARTSYS is returned from open() blkdev_get may loop without
calling open_finish(). On -ERESTARTSYS open_finish() is not called.

Move a ret = 0 assignment up in the if/else branching to avoid returning
-ENXIO. Previously the return value was ignored on the unhandled branch.
This just doesn't make much sense.  There is no point in messing up
the block API for ugly workarounds like that.
If you have ideas how to do this better then share them.

Thanks

Michal
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help