Commit:     fc0e01974ccccc7530b7634a63ee3fcc57b845ea
Parent:     40ffbfad6bb79a99cc7627bdaca0ee22dec526f6
Author:     Jason Lunz <[EMAIL PROTECTED]>
AuthorDate: Sat Sep 1 12:06:03 2007 -0700
Committer:  David Woodhouse <[EMAIL PROTECTED]>
CommitDate: Sun Sep 2 18:18:38 2007 +0100

    [JFFS2] fix write deadlock regression
    I've bisected the deadlock when many small appends are done on jffs2 down to
    this commit:
    commit 6fe6900e1e5b6fa9e5c59aa5061f244fe3f467e2
    Author: Nick Piggin <[EMAIL PROTECTED]>
    Date:   Sun May 6 14:49:04 2007 -0700
        mm: make read_cache_page synchronous
        Ensure pages are uptodate after returning from read_cache_page, which 
        us to cut out most of the filesystem-internal PageUptodate calls.
        I didn't have a great look down the call chains, but this appears to 
fixes 7
        possible use-before uptodate in hfs, 2 in hfsplus, 1 in jfs, a few in
        ecryptfs, 1 in jffs2, and a possible cleared data overwritten with 
readpage in
        block2mtd.  All depending on whether the filler is async and/or can 
        with a !uptodate page.
    It introduced a wait to read_cache_page, as well as a
    read_cache_page_async function equivalent to the old read_cache_page
    without any callers.
    Switching jffs2_gc_fetch_page to read_cache_page_async for the old
    behavior makes the deadlocks go away, but maybe reintroduces the
    use-before-uptodate problem? I don't understand the mm/fs interaction
    well enough to say.
    [It's fine. dwmw2.]
    Signed-off-by: Jason Lunz <[EMAIL PROTECTED]>
    Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>
 fs/jffs2/fs.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
index 1d3b7a9..8bc727b 100644
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -627,7 +627,7 @@ unsigned char *jffs2_gc_fetch_page(struct jffs2_sb_info *c,
        struct inode *inode = OFNI_EDONI_2SFFJ(f);
        struct page *pg;
-       pg = read_cache_page(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
+       pg = read_cache_page_async(inode->i_mapping, offset >> PAGE_CACHE_SHIFT,
                             (void *)jffs2_do_readpage_unlock, inode);
        if (IS_ERR(pg))
                return (void *)pg;
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to