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