diff options
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -286,8 +286,13 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode, | |||
286 | if ((flags & DIO_LOCKING) && iov_iter_rw(iter) == READ) | 286 | if ((flags & DIO_LOCKING) && iov_iter_rw(iter) == READ) |
287 | inode_unlock(inode); | 287 | inode_unlock(inode); |
288 | 288 | ||
289 | if ((retval > 0) && end_io) | 289 | if (end_io) { |
290 | end_io(iocb, pos, retval, bh.b_private); | 290 | int err; |
291 | |||
292 | err = end_io(iocb, pos, retval, bh.b_private); | ||
293 | if (err) | ||
294 | retval = err; | ||
295 | } | ||
291 | 296 | ||
292 | if (!(flags & DIO_SKIP_DIO_COUNT)) | 297 | if (!(flags & DIO_SKIP_DIO_COUNT)) |
293 | inode_dio_end(inode); | 298 | inode_dio_end(inode); |