Thread (8 messages) 8 messages, 3 authors, 2012-07-04

Re: [PATCH v4 1/2] aio: make kiocb->private NUll in init_sync_kiocb()

From: Junxiao Bi <hidden>
Date: 2012-06-29 10:18:24
Also in: lkml, ocfs2-devel

On 06/29/2012 05:22 PM, Joel Becker wrote:
On Thu, Jun 28, 2012 at 03:39:56PM -0700, Andrew Morton wrote:
quoted
On Wed, 27 Jun 2012 17:09:54 +0800
Junxiao Bi [off-list ref] wrote:
quoted
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 <redacted>
Cc: stable@vger.kernel.org
Acked-by: Jeff Moyer <redacted>
Acked-by: Joel Becker <jlbec@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
hm, that code is rather cruddy.  Pointless macromania.
Agreed.
quoted
If we do this:

static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
{
	*kiocb = (struct kiocb) {
			.ki_users = 1,
			.ki_key = KIOCB_SYNC_KEY,
			.ki_filp = filp,
			.ki_obj.tsk = current,
		};
}

then fs/read_write.o's .text is shrunk from 9857 bytes to 9714, which
is rather a lot.

But that's all rather irrelevant to your bugfix.
	I like your solution.  Junxiao, if you send me that version, I'd
be happy to take it.
Hi Joel,

Andrew had merged this patch to his tree. Do you like the second patch "
ocfs2: clear unaligned io flag when dio fails"?
Joel
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help