V3 changes: - add Cc: stable at vger.kernel.org in the patch header to align with stable rules - add Acked-by: Jeff Moyer <jmoyer at redhat.com> V2 changes: - update the patch header of the first patch to make it more clear. This patch list fixes an issue about ocfs2 aio/dio write process hang. The call trace is like this: @ cat /proc/15913/stack @ [<ffffffffa06e1085>] ocfs2_aiodio_wait+0x85/0xc0 [ocfs2] @ [<ffffffffa06e3e39>] ocfs2_file_aio_write+0x99/0xa0 [ocfs2] @ [<ffffffff811ace97>] aio_rw_vect_retry+0x87/0x150 @ [<ffffffff811aebd1>] aio_run_iocb+0x71/0x170 @ [<ffffffff811af59b>] io_submit_one+0x1ab/0x280 @ [<ffffffff811af77c>] do_io_submit+0x10c/0x1c0 @ [<ffffffff811af840>] sys_io_submit+0x10/0x20 @ [<ffffffff81509b42>] system_call_fastpath+0x16/0x1b @ [<ffffffffffffffff>] 0xffffffffffffffff
Junxiao Bi
2012-Jun-08 06:08 UTC
[Ocfs2-devel] [PATCH v3 1/2] 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(). Signed-off-by: Junxiao Bi <junxiao.bi at oracle.com> Cc: stable at vger.kernel.org Acked-by: Jeff Moyer <jmoyer at redhat.com> --- include/linux/aio.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/linux/aio.h b/include/linux/aio.h index 2314ad8..b1a520e 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h @@ -140,6 +140,7 @@ struct kiocb { (x)->ki_dtor = NULL; \ (x)->ki_obj.tsk = tsk; \ (x)->ki_user_data = 0; \ + (x)->private = NULL; \ } while (0) #define AIO_RING_MAGIC 0xa10a10a1 -- 1.7.9.5
Junxiao Bi
2012-Jun-08 06:08 UTC
[Ocfs2-devel] [PATCH v3 2/2] ocfs2: clear unaligned io flag when dio fails
The unaligned io flag is set in the kiocb when an unaligned dio is issued, it should be cleared even when the dio fails, or it may affect the following io which are using the same kiocb. Signed-off-by: Junxiao Bi <junxiao.bi at oracle.com> Cc: stable at vger.kernel.org --- fs/ocfs2/file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 061591a..98513c8 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -2422,8 +2422,10 @@ out_dio: unaligned_dio = 0; } - if (unaligned_dio) + if (unaligned_dio) { + ocfs2_iocb_clear_unaligned_aio(iocb); atomic_dec(&OCFS2_I(inode)->ip_unaligned_aio); + } out: if (rw_level != -1) -- 1.7.9.5
Joel Becker
2012-Jun-08 17:34 UTC
[Ocfs2-devel] [PATCH v3 1/2] aio: make kiocb->private NUll in init_sync_kiocb()
On Fri, Jun 08, 2012 at 02:08:04PM +0800, Junxiao Bi wrote:> 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(). > > Signed-off-by: Junxiao Bi <junxiao.bi at oracle.com> > Cc: stable at vger.kernel.org > Acked-by: Jeff Moyer <jmoyer at redhat.com>Acked-by: Joel Becker <jlbec at evilplan.org>> --- > include/linux/aio.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/linux/aio.h b/include/linux/aio.h > index 2314ad8..b1a520e 100644 > --- a/include/linux/aio.h > +++ b/include/linux/aio.h > @@ -140,6 +140,7 @@ struct kiocb { > (x)->ki_dtor = NULL; \ > (x)->ki_obj.tsk = tsk; \ > (x)->ki_user_data = 0; \ > + (x)->private = NULL; \ > } while (0) > > #define AIO_RING_MAGIC 0xa10a10a1 > -- > 1.7.9.5 >-- "We will have to repent in this generation not merely for the vitriolic words and actions of the bad people, but for the appalling silence of the good people." - Rev. Dr. Martin Luther King, Jr. http://www.jlbec.org/ jlbec at evilplan.org