On 6/9/21 12:07 PM, Pavel Begunkov wrote: > There is a complaint against sys_io_uring_enter() blocking if it submits > stdin reads. The problem is in __io_file_supports_async(), which > sees that it's a cdev and allows it to be processed inline. > > Punt char devices using generic rules of io_file_supports_async(), > including checking for presence of *_iter() versions of rw callbacks. > Apparently, it will affect most of cdevs with some exceptions like > null and zero devices. Reported-by: Birk Hirdman <lonjil@xxxxxxxxx> > Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> > --- > > "...For now, just ensure that anything potentially problematic is done > inline". I believe this part is outdated, but what use cases we miss? > Anything that we care about? > > IMHO the best option is to do like in this patch and add > (read,write)_iter(), to places we care about. > > /dev/[u]random, consoles, any else? > > fs/io_uring.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/io_uring.c b/fs/io_uring.c > index 42380ed563c4..44d1859f0dfb 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -2616,7 +2616,7 @@ static bool __io_file_supports_async(struct file *file, int rw) > return true; > return false; > } > - if (S_ISCHR(mode) || S_ISSOCK(mode)) > + if (S_ISSOCK(mode)) > return true; > if (S_ISREG(mode)) { > if (IS_ENABLED(CONFIG_BLOCK) && > -- Pavel Begunkov