On 10/16/20 2:55 AM, Xiaoguang Wang wrote: > hi, > > I have questions about below code comments, which was included in patch > "io_uring: add submission polling", > ------------------------------------------------------------ > /* > * Drop cur_mm before scheduling, we can't hold it for > * long periods (or over schedule()). Do this before > * adding ourselves to the waitqueue, as the unuse/drop > * may sleep. > */ > if (cur_mm) { > unuse_mm(cur_mm); > mmput(cur_mm); > cur_mm = NULL; > } > > prepare_to_wait(&ctx->sqo_wait, &wait, TASK_INTERRUPTIBLE); > ------------------------------------------------------------- > Stefano submited a patch "io_uring: prevent sq_thread from spinning when it should stop", > I understand what issue Stefano fixed, but don't understand below comments. > > Can anyone help to explain why we need to rop cur_mm before scheduling, or > why we can't hold it for long periods (or over schedule()), and if we > unuse/drop mm after adding ourselves to the waitqueue, what issue will > happen when unuse/drop sleeps, thanks. The not holding it too long it just trying to be nice. But we can't drop it after we've done prepare_to_wait(), as that sets our task runstate to a non-running state. This conflicts with with mmput(), which might sleep. -- Jens Axboe