Hide Forgot
+++ This bug was initially created as a clone of Bug #745640 +++ Description of problem: Missing aio_complete() call in finished_one_bio @ /fs/direct-io.c can cause process hang on IO operation. Version-Release number of selected component (if applicable): Affected kernel is >= 5.6. Issue was not reproduced on RHEL 5.5 and lower kernel. How reproducible: Need to setup OCFS2 cluster FS and use Oracle's database DataPump to export file to OCFS2 partition(mount point). Steps to Reproduce: 1. 2. 3. Actual results: Process hang / spin. Can't be killed - only OS restart. Expected results: Successfull information Additional info: From 2.6.18-274 RedHat patch : diff -Naurp linux-2.6.18.4/fs/direct-io.c linux-2.6.18-redhat/fs/direct-io.c --- linux-2.6.18.4/fs/direct-io.c +++ linux-2.6.18-redhat/fs/direct-io.c .. .. wrong : .. + if (dio->end_io && dio->result) { + if (dio->inode->i_sb->s_type->fs_flags & FS_HAS_IODONE2) { + dio_iodone2_t *end_io = (dio_iodone2_t *)dio->end_io; + + end_io(dio->iocb, offset, transferred, + dio->map_bh.b_private, ret, is_async); + } else + dio->end_io(dio->iocb, offset, transferred, + dio->map_bh.b_private); + } else if (is_async) { + aio_complete(dio->iocb, ret, 0); } .. .. correct : .. + if (dio->end_io && dio->result) { + if (dio->inode->i_sb->s_type->fs_flags & FS_HAS_IODONE2) { + dio_iodone2_t *end_io = (dio_iodone2_t *)dio->end_io; + + end_io(dio->iocb, offset, transferred, + dio->map_bh.b_private, ret, is_async); + } else { + dio->end_io(dio->iocb, offset, transferred, + dio->map_bh.b_private); + if (is_async) + aio_complete(dio->iocb, ret, 0); + } + } else if (is_async) { + aio_complete(dio->iocb, ret, 0); }
*** This bug has been marked as a duplicate of bug 734157 ***