Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland - Kernel

This is a discussion on Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland - Kernel ; Hi Erez, On 10/7/07, Erez Zadok wrote: > Anyway, some Ubuntu users of Unionfs reported that msync(2) sometimes > returns AOP_WRITEPAGE_ACTIVATE (decimal 524288) back to userland. > Therefore, some user programs fail, esp. if they're written such as > this: ...

+ Reply to Thread
Results 1 to 3 of 3

Thread: Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland

  1. Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland

    Hi Erez,

    On 10/7/07, Erez Zadok wrote:
    > Anyway, some Ubuntu users of Unionfs reported that msync(2) sometimes
    > returns AOP_WRITEPAGE_ACTIVATE (decimal 524288) back to userland.
    > Therefore, some user programs fail, esp. if they're written such as
    > this:


    [snip]

    On 10/7/07, Erez Zadok wrote:
    > Is this a bug indeed, or are user programs supposed to handle¬
    > AOP_WRITEPAGE_ACTIVATE (I hope not the latter). If it's a kernel bug,
    > what should the kernel return: a zero, or an -errno (and which one)?


    It's a kernel bug. AOP_WRITEPAGE_ACTIVATE is a hint to the VM to avoid
    writeback of the page in the near future. I wonder if it's enough that we
    change the return value to zero from
    mm/page-writeback.c:write_cache_pages() in case we hit AOP_WRITEPAGE_ACTIVE...

    Pekka

    diff --git a/mm/page-writeback.c b/mm/page-writeback.c
    index 63512a9..717f341 100644
    --- a/mm/page-writeback.c
    +++ b/mm/page-writeback.c
    @@ -672,8 +672,10 @@ retry:

    ret = (*writepage)(page, wbc, data);

    - if (unlikely(ret == AOP_WRITEPAGE_ACTIVATE))
    + if (unlikely(ret == AOP_WRITEPAGE_ACTIVATE)) {
    unlock_page(page);
    + ret = 0;
    + }
    if (ret || (--(wbc->nr_to_write) <= 0))
    done = 1;
    if (wbc->nonblocking && bdi_write_congested(bdi)) {

  2. Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland

    On 10/7/07, Pekka J Enberg wrote:
    > On 10/7/07, Erez Zadok wrote:
    > > Anyway, some Ubuntu users of Unionfs reported that msync(2) sometimes
    > > returns AOP_WRITEPAGE_ACTIVATE (decimal 524288) back to userland.
    > > Therefore, some user programs fail, esp. if they're written such as
    > > this:

    >

    ....
    > It's a kernel bug. AOP_WRITEPAGE_ACTIVATE is a hint to the VM to avoid
    > writeback of the page in the near future. I wonder if it's enough that we
    > change the return value to zero from
    > mm/page-writeback.c:write_cache_pages() in case we hit AOP_WRITEPAGE_ACTIVE...


    Doesn't appear to be enough. I can't figure out why (since it appears
    write_cache_pages bubbles up directly to sys_msync), but with that
    patch applied, in my test case[1], msync returns -1 EIO. However,
    with the exact same kernel without that patch applied, msync returns
    524288 (AOP_WRITEPAGE_ACTIVATE). But as your patch specifically flips
    524288 to 0, I can't figure out how it eventually returns -1 EIO.

    Ryan

    [1] "apt-get check" on a unionfs2 mount backed by tmpfs over cdrom,
    standard livecd setup
    -
    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/

  3. Re: msync(2) bug(?), returns AOP_WRITEPAGE_ACTIVATE to userland

    Hi Ryan,

    On 10/8/07, Ryan Finnie wrote:
    > Doesn't appear to be enough. I can't figure out why (since it appears
    > write_cache_pages bubbles up directly to sys_msync), but with that
    > patch applied, in my test case[1], msync returns -1 EIO. However,
    > with the exact same kernel without that patch applied, msync returns
    > 524288 (AOP_WRITEPAGE_ACTIVATE). But as your patch specifically flips
    > 524288 to 0, I can't figure out how it eventually returns -1 EIO.
    >
    > [1] "apt-get check" on a unionfs2 mount backed by tmpfs over cdrom,
    > standard livecd setup


    You have swap device disabled, right? If so, I can't see any reason
    why msync(2) on tmpfs would return -EIO. Can you please send a strace
    log for your test case?

    Pekka
    -
    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/

+ Reply to Thread