Re: [PATCH] cifs: fix incorrect handling of smb2_set_sparse() return in smb3_simple_falloc

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

 



Merged into cifs-2.6.git fo-next and kicked off the buildbot with
current for-next

http://smb3-test-rhel-75.southcentralus.cloudapp.azure.com/#/builders/2/builds/162

On Thu, Mar 14, 2019 at 9:08 AM Ronnie Sahlberg <lsahlber@xxxxxxxxxx> wrote:
>
> smb2_set_sparse does not return -errno, it returns a boolean where
> true means success.
> Change this to just ignore the return value just like the other callsites.
>
> Additionally add code to handle the case where we must set the file sparse
> and possibly also extending it.
>
> Fixes xfstests: generic/236 generic/350 generic/420
>
> Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx>
> ---
>  fs/cifs/smb2ops.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
> index 32dde87feaa9..03814b9f113d 100644
> --- a/fs/cifs/smb2ops.c
> +++ b/fs/cifs/smb2ops.c
> @@ -2718,6 +2718,7 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
>         struct cifsFileInfo *cfile = file->private_data;
>         long rc = -EOPNOTSUPP;
>         unsigned int xid;
> +       __le64 eof;
>
>         xid = get_xid();
>
> @@ -2777,9 +2778,18 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
>                         return rc;
>                 }
>
> -               rc = smb2_set_sparse(xid, tcon, cfile, inode, false);
> +               smb2_set_sparse(xid, tcon, cfile, inode, false);
> +               rc = 0;
> +       } else {
> +               smb2_set_sparse(xid, tcon, cfile, inode, false);
> +               rc = 0;
> +               if (i_size_read(inode) < off + len) {
> +                       eof = cpu_to_le64(off + len);
> +                       rc = SMB2_set_eof(xid, tcon, cfile->fid.persistent_fid,
> +                                         cfile->fid.volatile_fid, cfile->pid,
> +                                         &eof);
> +               }
>         }
> -       /* BB: else ... in future add code to extend file and set sparse */
>
>         if (rc)
>                 trace_smb3_falloc_err(xid, cfile->fid.persistent_fid, tcon->tid,
> --
> 2.13.6
>


-- 
Thanks,

Steve



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

  Powered by Linux