Re: [PATCH 2/9] cifs: pass a path to open_shroot and check if it is the root or not

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Similar checkpatch complaint about ENOTSUPP (instead of EOPNOTSUPP)

WARNING: ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP
#74: FILE: fs/cifs/smb2ops.c:754:
+ return -ENOTSUPP;

the header which defines ENOTSUPP notes:

/*
 * These should never be seen by user programs.  To return one of ERESTART*
 * codes, signal_pending() MUST be set.  Note that ptrace can observe these
 * at syscall exit tracing, but they will never be left for the debugged user
 * process to see.
 */

On Mon, Mar 8, 2021 at 5:07 PM Ronnie Sahlberg <lsahlber@xxxxxxxxxx> wrote:
>
> 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@xxxxxxxxxx>
> ---
>  fs/cifs/smb2inode.c | 22 ++++++++++------------
>  fs/cifs/smb2ops.c   |  6 +++++-
>  fs/cifs/smb2proto.h |  1 +
>  3 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
> index 3d59614cbe8f..67f80c9561fc 100644
> --- a/fs/cifs/smb2inode.c
> +++ b/fs/cifs/smb2inode.c
> @@ -523,22 +523,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);
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 7ee6926153b8..96ff946674e6 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -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)
>  {
> @@ -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");
> @@ -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
> diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h
> index 9565e27681a5..7e4fc69c8b01 100644
> --- a/fs/cifs/smb2proto.h
> +++ b/fs/cifs/smb2proto.h
> @@ -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);
> --
> 2.13.6
>


-- 
Thanks,

Steve



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux