In particular, block_read_full_page() assumes that it is safe to begin IO
on any non-uptodate bh, regardless of the locked status of the bh. To be
safe, we need to test the uptodate state *after* taking the bh lock.
Already in 2.5.
--- linux-ext3-2.4merge/fs/buffer.c.=K0004=.orig Tue Aug 27 23:14:15 2002
+++ linux-ext3-2.4merge/fs/buffer.c Tue Aug 27 23:19:57 2002
@@ -1748,9 +1748,14 @@
}
/* Stage 3: start the IO */
- for (i = 0; i < nr; i++)
- submit_bh(READ, arr[i]);
-
+ for (i = 0; i < nr; i++) {
+ struct buffer_head * bh = arr[i];
+ if (buffer_uptodate(bh))
+ end_buffer_io_async(bh, 1);
+ else
+ submit_bh(READ, bh);
+ }
+
return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/