linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [V2]fix ocfs2 aio/dio writing process hang
@ 2012-06-05  7:26 Junxiao Bi
  2012-06-05  7:26 ` [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb() Junxiao Bi
  2012-06-05  7:26 ` [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails Junxiao Bi
  0 siblings, 2 replies; 6+ messages in thread
From: Junxiao Bi @ 2012-06-05  7:26 UTC (permalink / raw)
  To: ocfs2-devel, linux-aio
  Cc: jmoyer, mfasheh, jlbec, bcrl, linux-kernel, stable, joe.jin,
	dave.kleikamp


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




^ permalink raw reply	[flat|nested] 6+ messages in thread

* [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb()
  2012-06-05  7:26 [V2]fix ocfs2 aio/dio writing process hang Junxiao Bi
@ 2012-06-05  7:26 ` Junxiao Bi
  2012-06-05  9:31   ` Greg KH
  2012-06-07 15:09   ` Jeff Moyer
  2012-06-05  7:26 ` [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails Junxiao Bi
  1 sibling, 2 replies; 6+ messages in thread
From: Junxiao Bi @ 2012-06-05  7:26 UTC (permalink / raw)
  To: ocfs2-devel, linux-aio
  Cc: jmoyer, mfasheh, jlbec, bcrl, linux-kernel, stable, joe.jin,
	dave.kleikamp, Junxiao Bi

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@oracle.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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails
  2012-06-05  7:26 [V2]fix ocfs2 aio/dio writing process hang Junxiao Bi
  2012-06-05  7:26 ` [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb() Junxiao Bi
@ 2012-06-05  7:26 ` Junxiao Bi
  2012-06-05  9:31   ` Greg KH
  1 sibling, 1 reply; 6+ messages in thread
From: Junxiao Bi @ 2012-06-05  7:26 UTC (permalink / raw)
  To: ocfs2-devel, linux-aio
  Cc: jmoyer, mfasheh, jlbec, bcrl, linux-kernel, stable, joe.jin,
	dave.kleikamp, Junxiao Bi

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@oracle.com>
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb()
  2012-06-05  7:26 ` [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb() Junxiao Bi
@ 2012-06-05  9:31   ` Greg KH
  2012-06-07 15:09   ` Jeff Moyer
  1 sibling, 0 replies; 6+ messages in thread
From: Greg KH @ 2012-06-05  9:31 UTC (permalink / raw)
  To: Junxiao Bi
  Cc: ocfs2-devel, linux-aio, jmoyer, mfasheh, jlbec, bcrl,
	linux-kernel, stable, joe.jin, dave.kleikamp

On Tue, Jun 05, 2012 at 03:26:49PM +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@oracle.com>
> ---
>  include/linux/aio.h |    1 +
>  1 file changed, 1 insertion(+)

<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
for how to do this properly.

</formletter>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails
  2012-06-05  7:26 ` [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails Junxiao Bi
@ 2012-06-05  9:31   ` Greg KH
  0 siblings, 0 replies; 6+ messages in thread
From: Greg KH @ 2012-06-05  9:31 UTC (permalink / raw)
  To: Junxiao Bi
  Cc: ocfs2-devel, linux-aio, jmoyer, mfasheh, jlbec, bcrl,
	linux-kernel, stable, joe.jin, dave.kleikamp

On Tue, Jun 05, 2012 at 03:26:50PM +0800, Junxiao Bi wrote:
> 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@oracle.com>
> ---
>  fs/ocfs2/file.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 

<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
for how to do this properly.

</formletter>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb()
  2012-06-05  7:26 ` [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb() Junxiao Bi
  2012-06-05  9:31   ` Greg KH
@ 2012-06-07 15:09   ` Jeff Moyer
  1 sibling, 0 replies; 6+ messages in thread
From: Jeff Moyer @ 2012-06-07 15:09 UTC (permalink / raw)
  To: Junxiao Bi
  Cc: ocfs2-devel, linux-aio, mfasheh, jlbec, bcrl, linux-kernel,
	stable, joe.jin, dave.kleikamp

Junxiao Bi <junxiao.bi@oracle.com> writes:

> 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@oracle.com>

Acked-by: Jeff Moyer <jmoyer@redhat.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2012-06-07 15:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-05  7:26 [V2]fix ocfs2 aio/dio writing process hang Junxiao Bi
2012-06-05  7:26 ` [V2 PATCH 1/2] aio: make kiocb->private NUll in init_sync_kiocb() Junxiao Bi
2012-06-05  9:31   ` Greg KH
2012-06-07 15:09   ` Jeff Moyer
2012-06-05  7:26 ` [V2 PATCH 2/2] ocfs2: clear unaligned io flag when dio fails Junxiao Bi
2012-06-05  9:31   ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).