diff --git a/fs/netfs/read_collect.c b/fs/netfs/read_collect.c index f65affa5a9e4..73fea10d9a78 100644 --- a/fs/netfs/read_collect.c +++ b/fs/netfs/read_collect.c @@ -369,12 +369,17 @@ static void netfs_rreq_assess_dio(struct netfs_io_request *rreq) } } + spin_lock(&rreq->lock); if (rreq->iocb) { rreq->iocb->ki_pos += rreq->transferred; - if (rreq->iocb->ki_complete) + if (rreq->iocb->ki_complete) { rreq->iocb->ki_complete( rreq->iocb, rreq->error ? rreq->error : rreq->transferred); + rreq->iocb = NULL; + } } + spin_unlock(&rreq->lock); + if (rreq->netfs_ops->done) rreq->netfs_ops->done(rreq); if (rreq->origin == NETFS_DIO_READ)