History

aio: make kiocb->private NUll in init_sync_kiocb()

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().

Junxiao Bi committed 14 years ago

Commit 2dfd0601 parent a4564ea1 file · +1 −0Browse files

Unified · Split

include/linux/aio.h+1−0
@@ -140,6 +140,7 @@ struct kiocb { · 139 unmodified lines
140140 (x)->ki_dtor = NULL; \
141141 (x)->ki_obj.tsk = tsk; \
142142 (x)->ki_user_data = 0; \
143+ (x)->private = NULL; \
143144 } while (0)
144145
145146 #define AIO_RING_MAGIC 0xa10a10a1