2011/10/22 Jeff Layton <jlayton@xxxxxxxxxx>: > On Sat, 22 Oct 2011 14:19:17 +0400 > Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote: > >> We should call cifs_all_info_to_fattr in rc == 0 case only. >> >> Cc: <stable@xxxxxxxxxx> >> Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx> >> --- >> fs/cifs/inode.c | 11 ++++++----- >> 1 files changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c >> index 663c4e3..b84c346 100644 >> --- a/fs/cifs/inode.c >> +++ b/fs/cifs/inode.c >> @@ -562,7 +562,12 @@ int cifs_get_file_info(struct file *filp) >> >> xid = GetXid(); >> rc = CIFSSMBQFileInfo(xid, tcon, cfile->netfid, &find_data); >> - if (rc == -EOPNOTSUPP || rc == -EINVAL) { >> + if (!rc) >> + cifs_all_info_to_fattr(&fattr, &find_data, cifs_sb, false); >> + else if (rc == -EREMOTE) { >> + cifs_create_dfs_fattr(&fattr, inode->i_sb); >> + rc = 0; >> + } else if (rc == -EOPNOTSUPP || rc == -EINVAL) { >> /* >> * FIXME: legacy server -- fall back to path-based call? >> * for now, just skip revalidating and mark inode for >> @@ -571,9 +576,6 @@ int cifs_get_file_info(struct file *filp) >> rc = 0; >> CIFS_I(inode)->time = 0; >> goto cgfi_exit; >> - } else if (rc == -EREMOTE) { >> - cifs_create_dfs_fattr(&fattr, inode->i_sb); >> - rc = 0; >> } else if (rc) >> goto cgfi_exit; >> >> @@ -581,7 +583,6 @@ int cifs_get_file_info(struct file *filp) >> * 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); > > This looks correct to me. Nice catch. > > Since you're in here though...maybe this would be better expressed with > a switch statement? > Good idea - resent it. -- Best regards, Pavel Shilovsky. -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html