]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.fixes/do_anonymous_page-race
Fix oinkmaster patch.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.fixes / do_anonymous_page-race
CommitLineData
2cb7cef9
BS
1From: Andrea Arcangeli <andrea@suse.de>
2Subject: Race condition in userspace testcase
3References: 46948, LTC11574
4
5
6Additional Comment #103 From Andrea Arcangeli 2004-10-15 19:41
7the last patch I attached is the safest I believe.
8
9I'm not sure if a lock_unlock or lock_unlock is always guaranteed to happen
10after the I/O, and this makes sure no race can happen anymore.
11
12---
13 fs/bio.c | 10 ++++++++++
14 1 file changed, 10 insertions(+)
15
16--- a/fs/bio.c
17+++ b/fs/bio.c
18@@ -1192,6 +1192,16 @@ void bio_endio(struct bio *bio, int erro
19 else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
20 error = -EIO;
21
22+ if (bio_data_dir(bio) == READ)
23+ /*
24+ * If the current cpu has written to the page by hand
25+ * without dma, we must enforce ordering to be sure
26+ * this written data will be visible before we expose
27+ * the page contents to other cpus (for example with
28+ * a set_pte).
29+ */
30+ smp_wmb();
31+
32 if (bio->bi_end_io)
33 bio->bi_end_io(bio, error);
34 }