lkml.org 
[lkml]   [2010]   [Dec]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/3] NFS: Ensure we use the correct cookie in nfs_readdir_xdr_filler
    Date
    We need to use the cookie from the previous array entry, not the
    actual cookie that we are searching for (except for the case of
    uncached_readdir).

    Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
    ---
    fs/nfs/dir.c | 10 ++++++++--
    1 files changed, 8 insertions(+), 2 deletions(-)

    diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
    index f0a384e..e03537f 100644
    --- a/fs/nfs/dir.c
    +++ b/fs/nfs/dir.c
    @@ -178,6 +178,7 @@ typedef struct {
    struct page *page;
    unsigned long page_index;
    u64 *dir_cookie;
    + u64 last_cookie;
    loff_t current_index;
    decode_dirent_t decode;

    @@ -344,6 +345,8 @@ int nfs_readdir_search_array(nfs_readdir_descriptor_t *desc)
    else
    status = nfs_readdir_search_for_cookie(array, desc);

    + if (status == -EAGAIN)
    + desc->last_cookie = array->last_cookie;
    nfs_readdir_release_array(desc->page);
    out:
    return status;
    @@ -563,7 +566,7 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page,
    unsigned int array_size = ARRAY_SIZE(pages);

    entry.prev_cookie = 0;
    - entry.cookie = *desc->dir_cookie;
    + entry.cookie = desc->last_cookie;
    entry.eof = 0;
    entry.fh = nfs_alloc_fhandle();
    entry.fattr = nfs_alloc_fattr();
    @@ -672,8 +675,10 @@ int readdir_search_pagecache(nfs_readdir_descriptor_t *desc)
    {
    int res;

    - if (desc->page_index == 0)
    + if (desc->page_index == 0) {
    desc->current_index = 0;
    + desc->last_cookie = 0;
    + }
    while (1) {
    res = find_cache_page(desc);
    if (res != -EAGAIN)
    @@ -764,6 +769,7 @@ int uncached_readdir(nfs_readdir_descriptor_t *desc, void *dirent,
    }

    desc->page_index = 0;
    + desc->last_cookie = *desc->dir_cookie;
    desc->page = page;

    status = nfs_readdir_xdr_to_array(desc, page, inode);
    --
    1.7.3.2


    \
     
     \ /
      Last update: 2010-12-01 16:39    [W:0.027 / U:0.092 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site