X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=fs%2Fdax.c;h=90322eb7498c13289a346ce82a64d8ab34c23851;hb=2de6a3c73180ef4071b45185756be51a6c767924;hp=bbb2ad78377020ac85158fb61df067aceadaafe5;hpb=1a46712aa99594eabe1e9aeedf115dfff0db1dfd;p=deliverable%2Flinux.git diff --git a/fs/dax.c b/fs/dax.c index bbb2ad783770..90322eb7498c 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -286,8 +286,13 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode, if ((flags & DIO_LOCKING) && iov_iter_rw(iter) == READ) inode_unlock(inode); - if ((retval > 0) && end_io) - end_io(iocb, pos, retval, bh.b_private); + if (end_io) { + int err; + + err = end_io(iocb, pos, retval, bh.b_private); + if (err) + retval = err; + } if (!(flags & DIO_SKIP_DIO_COUNT)) inode_dio_end(inode);