|
@@ -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);
|