Skip to content

Commit

Permalink
cifs: pass a path to open_shroot and check if it is the root or not
Browse files Browse the repository at this point in the history
Move the check for the directory path into the open_shroot() function
but still fail for any non-root directories.
This is preparation for later when we will start using the cache also
for other directories than the root.

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
  • Loading branch information
Ronnie Sahlberg authored and Steve French committed Apr 25, 2021
1 parent 4df3d97 commit e6eb195
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 13 deletions.
22 changes: 10 additions & 12 deletions fs/cifs/smb2inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,22 +524,20 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
return -ENOMEM;

/* If it is a root and its handle is cached then use it */
if (!strlen(full_path)) {
rc = open_shroot(xid, tcon, cifs_sb, &cfid);
if (!rc) {
if (tcon->crfid.file_all_info_is_valid) {
move_smb2_info_to_cifs(data,
rc = open_shroot(xid, tcon, full_path, cifs_sb, &cfid);
if (!rc) {
if (tcon->crfid.file_all_info_is_valid) {
move_smb2_info_to_cifs(data,
&tcon->crfid.file_all_info);
} else {
rc = SMB2_query_info(xid, tcon,
} else {
rc = SMB2_query_info(xid, tcon,
cfid->fid->persistent_fid,
cfid->fid->volatile_fid, smb2_data);
if (!rc)
move_smb2_info_to_cifs(data, smb2_data);
}
close_shroot(cfid);
goto out;
if (!rc)
move_smb2_info_to_cifs(data, smb2_data);
}
close_shroot(cfid);
goto out;
}

cifs_get_readable_path(tcon, full_path, &cfile);
Expand Down
6 changes: 5 additions & 1 deletion fs/cifs/smb2ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,7 @@ smb2_cached_lease_break(struct work_struct *work)
* Open the directory at the root of a share
*/
int open_shroot(unsigned int xid, struct cifs_tcon *tcon,
const char *path,
struct cifs_sb_info *cifs_sb,
struct cached_fid **cfid)
{
Expand All @@ -749,6 +750,9 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon,
if (tcon->nohandlecache)
return -ENOTSUPP;

if (strlen(path))
return -ENOTSUPP;

mutex_lock(&tcon->crfid.fid_mutex);
if (tcon->crfid.is_valid) {
cifs_dbg(FYI, "found a cached root file handle\n");
Expand Down Expand Up @@ -926,7 +930,7 @@ smb3_qfs_tcon(const unsigned int xid, struct cifs_tcon *tcon,
oparms.fid = &fid;
oparms.reconnect = false;

rc = open_shroot(xid, tcon, cifs_sb, &cfid);
rc = open_shroot(xid, tcon, "", cifs_sb, &cfid);
if (rc == 0)
memcpy(&fid, cfid->fid, sizeof(struct cifs_fid));
else
Expand Down
1 change: 1 addition & 0 deletions fs/cifs/smb2proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ extern int smb3_handle_read_data(struct TCP_Server_Info *server,
struct mid_q_entry *mid);

extern int open_shroot(unsigned int xid, struct cifs_tcon *tcon,
const char *path,
struct cifs_sb_info *cifs_sb,
struct cached_fid **cfid);
extern void close_shroot(struct cached_fid *cfid);
Expand Down

0 comments on commit e6eb195

Please sign in to comment.