|
@@ -2411,8 +2411,16 @@ static int ocfs2_dio_end_io(struct kiocb *iocb,
|
|
/* this io's submitter should not have unlocked this before we could */
|
|
/* this io's submitter should not have unlocked this before we could */
|
|
BUG_ON(!ocfs2_iocb_is_rw_locked(iocb));
|
|
BUG_ON(!ocfs2_iocb_is_rw_locked(iocb));
|
|
|
|
|
|
- if (bytes > 0 && private)
|
|
|
|
- ret = ocfs2_dio_end_io_write(inode, private, offset, bytes);
|
|
|
|
|
|
+ if (bytes <= 0)
|
|
|
|
+ mlog_ratelimited(ML_ERROR, "Direct IO failed, bytes = %lld",
|
|
|
|
+ (long long)bytes);
|
|
|
|
+ if (private) {
|
|
|
|
+ if (bytes > 0)
|
|
|
|
+ ret = ocfs2_dio_end_io_write(inode, private, offset,
|
|
|
|
+ bytes);
|
|
|
|
+ else
|
|
|
|
+ ocfs2_dio_free_write_ctx(inode, private);
|
|
|
|
+ }
|
|
|
|
|
|
ocfs2_iocb_clear_rw_locked(iocb);
|
|
ocfs2_iocb_clear_rw_locked(iocb);
|
|
|
|
|