Am Freitag, 23. Juni 2017, 08:10:48 CEST schrieb Herbert Xu:
Hi Herbert,
> On Wed, Jun 21, 2017 at 10:03:02PM +0200, Stephan Müller wrote:
> > + /* convert iovecs of output buffers into RX SGL */
> > + while (len < ctx->used && msg_data_left(msg)) {
>
> How are we supposed to reach the wait path when ctx->used == 0?
Right.
May I ask whether that wait is correct to begin with? The recvmsg is protected
by a lock_sock. Thus, if the code is waiting, the lock is still held. So, how
can data be inserted into the socket by sendmsg/sendpage while recvmsg is
waiting? Don't we have a deadlock here?
>
> > + /*
> > + * This error covers -EIOCBQUEUED which implies that we can
> > + * only handle one AIO request. If the caller wants to have
> > + * multiple AIO requests in parallel, he must make multiple
> > + * separate AIO calls.
> > + */
> > + if (err < 0) {
> > + if (err == -EIOCBQUEUED)
> > + ret = err;
> > + goto out;
> >
> > }
> >
> > + if (!err)
> > + goto out;
>
> You can combine the two now as err <= 0.
Fixed, thank you.
>
> Thanks,
Ciao
Stephan