Thread (4 messages) 4 messages, 3 authors, 2011-08-17

Re: [PATCH] ext4: Resolve the hang of direct i/o read in handling EXT4_IO_END_UNWRITTEN.

From: Tao Ma <hidden>
Date: 2011-08-17 02:32:20

On 08/17/2011 02:29 AM, Ted Ts'o wrote:
On Tue, Aug 16, 2011 at 02:37:53PM +0800, Tao Ma wrote:
quoted
From: Tao Ma <redacted>

EXT4_IO_END_UNWRITTEN flag set and the increase of i_aiodio_unwritten should
be done simultaneously since ext4_end_io_nolock always clear the flag and
decrease the counter in the same time.

We don't increase i_aiodio_unwritten when setting EXT4_IO_END_UNWRITTEN so
it will go nagative and causes some process to wait forever.

Part of the patch came from Eric in his e-mail, but it doesn't fix the problem
met by Michael actually.
http://marc.info/?l=linux-ext4&m=131316851417460&w=2

Reported-and-Tested-by: Michael Tokarev<redacted>
Signed-off-by: Eric Sandeen <redacted>
Signed-off-by: Tao Ma <redacted>
Thanks I've taken this into the ext4 tree.  I am a bit worried this
will trigger a GCC warning:

+	/*
+	 * It may be over-defensive here to check EXT4_IO_END_UNWRITTEN now,
+	 * but being more careful is always safe for the future change.
+	 */
 	inode = io_end->inode;
+	if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
+		io_end->flag |= EXT4_IO_END_UNWRITTEN;
+		atomic_inc(&EXT4_I(inode)->i_aiodio_unwritten);
+	}
 
 	/* Add the io_end to per-inode completed io list*/
 	spin_lock_irqsave(&EXT4_I(inode)->i_completed_io_lock, flags);

... since in Google we've been compiling with -Werror, but it's not
causing an error on gcc 4.4, which is what I still have on my laptop.
It may be that newer versions of GCC are smart enough to notice tha
the above is dead code, and then complain with a warning.
Sorry for my bluntness. But where is the 'dead code' you mean?

Thanks
Tao
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help