[PATCH] cifs: Clean up an error code in cifs_root_iget()
Steve French
smfrench at gmail.com
Thu Feb 28 05:44:14 UTC 2019
Won't that change behavior and cause the success case (server returned
0, and does support POSIX and &inode pointer is ok) to now return
-EINVAL.
Before if rc was 0 and inode was filled in we wouldn't execute this else block:
} else if (rc) {
iget_failed(inode);
inode = ERR_PTR(rc);
}
But with your change, won't we return EINVAL for the success case?
How about just changing:
iget_no_retry:
if (!inode) {
inode = ERR_PTR(rc);
goto out;
}
to
iget_no_retry:
if (!inode) {
if (rc == 0)
rc = -EINVAL;
inode = ERR_PTR(rc);
goto out;
}
On Wed, Feb 27, 2019 at 11:28 PM Dan Carpenter via samba-technical
<samba-technical at lists.samba.org> wrote:
>
> This patch silences a Smatch warning:
>
> fs/cifs/inode.c:1094 cifs_root_iget() warn: passing zero to 'ERR_PTR'
>
> The shouldn't have a noticeable effect on runtime, it's basically
> a cleanup. The code is checking to ensure that cifs_get_inode_info_unix()
> returns -EOPNOTSUPP when we have the UNIX extensions. From the patch
> description in commit b5b374eab11e ("Workaround Mac server problem")
> this affects Macs.
>
> Presumably most of the time "rc" is zero, which means we return
> ERR_PTR(0) which is NULL. This cifs_root_iget() function is only called
> from cifs_read_super() and if we return NULL that causes d_make_root()
> to return NULL so in the end we fail with -ENOMEM.
>
> After this patch is applied we instead return with -EINVAL.
>
> Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
> ---
> fs/cifs/inode.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
> index 0f53ecb071ac..e40c554bb2f3 100644
> --- a/fs/cifs/inode.c
> +++ b/fs/cifs/inode.c
> @@ -1080,8 +1080,10 @@ struct inode *cifs_root_iget(struct super_block *sb)
> if (tcon->unix_ext) {
> rc = cifs_get_inode_info_unix(&inode, path, sb, xid);
> /* some servers mistakenly claim POSIX support */
> - if (rc != -EOPNOTSUPP)
> + if (rc != -EOPNOTSUPP) {
> + rc = -EINVAL;
> goto iget_no_retry;
> + }
> cifs_dbg(VFS, "server does not support POSIX extensions");
> tcon->unix_ext = false;
> }
> --
> 2.17.1
>
>
--
Thanks,
Steve
More information about the samba-technical
mailing list