Ocfs2 uses kiocb.*private as a flag of unsigned long size. In commit a11f7e6 ocfs2: serialize unaligned aio, the unaligned io flag is involved in it to serialize the unaligned aio. As *private is not initialized in init_sync_kiocb() of do_sync_write(), this unaligned io flag may be unexpectly set in an aligned dio. And this will cause OCFS2_I(inode)->ip_unaligned_aio decreased to -1 in ocfs2_dio_end_io(), thus the following unaligned dio will hang forever at ocfs2_aiodio_wait() in ocfs2_file_aio_write().
Unified · Split
| @@ -140,6 +140,7 @@ struct kiocb { · 139 unmodified lines | ||
| 140 | 140 | (x)->ki_dtor = NULL; \ |
| 141 | 141 | (x)->ki_obj.tsk = tsk; \ |
| 142 | 142 | (x)->ki_user_data = 0; \ |
| 143 | + (x)->private = NULL; \ | |
| 143 | 144 | } while (0) |
| 144 | 145 | |
| 145 | 146 | #define AIO_RING_MAGIC 0xa10a10a1 |