lkml.org 
[lkml]   [2011]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[002/262] CIFS: Fix DFS handling in cifs_get_file_info
    3.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Pavel Shilovsky <piastry@etersoft.ru>

    commit 42274bb22afc3e877ae5abed787b0b09d7dede52 upstream.

    We should call cifs_all_info_to_fattr in rc == 0 case only.

    Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru>
    Reviewed-by: Jeff Layton <jlayton@redhat.com>
    Signed-off-by: Steve French <smfrench@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/cifs/inode.c | 19 ++++++++++++-------
    1 file changed, 12 insertions(+), 7 deletions(-)

    --- a/fs/cifs/inode.c
    +++ b/fs/cifs/inode.c
    @@ -562,7 +562,16 @@ int cifs_get_file_info(struct file *filp

    xid = GetXid();
    rc = CIFSSMBQFileInfo(xid, tcon, cfile->netfid, &find_data);
    - if (rc == -EOPNOTSUPP || rc == -EINVAL) {
    + switch (rc) {
    + case 0:
    + cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false);
    + break;
    + case -EREMOTE:
    + cifs_create_dfs_fattr(&fattr, inode->i_sb);
    + rc = 0;
    + break;
    + case -EOPNOTSUPP:
    + case -EINVAL:
    /*
    * FIXME: legacy server -- fall back to path-based call?
    * for now, just skip revalidating and mark inode for
    @@ -570,18 +579,14 @@ int cifs_get_file_info(struct file *filp
    */
    rc = 0;
    CIFS_I(inode)->time = 0;
    + default:
    goto cgfi_exit;
    - } else if (rc == -EREMOTE) {
    - cifs_create_dfs_fattr(&fattr, inode->i_sb);
    - rc = 0;
    - } else if (rc)
    - goto cgfi_exit;
    + }

    /*
    * don't bother with SFU junk here -- just mark inode as needing
    * revalidation.
    */
    - cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false);
    fattr.cf_uniqueid = CIFS_I(inode)->uniqueid;
    fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
    cifs_fattr_to_inode(inode, &fattr);



    \
     
     \ /
      Last update: 2011-11-10 04:23    [W:4.140 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site