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? -- Jeff Layton <jlayton@xxxxxxxxxx> -- 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