Re: [PATCH 1/3] cifs: Fix FALLOC_FL_ZERO_RANGE by setting i_size if EOF moved

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

 



David Howells <dhowells@xxxxxxxxxx> writes:

> @@ -3307,6 +3307,7 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
>  	struct inode *inode = file_inode(file);
>  	struct cifsInodeInfo *cifsi = CIFS_I(inode);
>  	struct cifsFileInfo *cfile = file->private_data;
> +	unsigned long long new_size;
>  	long rc;
>  	unsigned int xid;
>  	__le64 eof;
> @@ -3337,10 +3338,15 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
>  	/*
>  	 * do we also need to change the size of the file?
>  	 */

Perhaps remove the comment above as we're now updating the inode size?

> -	if (keep_size == false && i_size_read(inode) < offset + len) {
> -		eof = cpu_to_le64(offset + len);
> +	new_size = offset + len;
> +	if (keep_size == false && (unsigned long long)i_size_read(inode) < new_size) {
> +		eof = cpu_to_le64(new_size);
>  		rc = SMB2_set_eof(xid, tcon, cfile->fid.persistent_fid,
>  				  cfile->fid.volatile_fid, cfile->pid, &eof);
> +		if (rc >= 0) {
> +			truncate_setsize(inode, new_size);
> +			fscache_resize_cookie(cifs_inode_cookie(inode), new_size);
> +		}
>  	}
>  
>   zero_range_exit:

Looks good,

Acked-by: Paulo Alcantara (SUSE) <pc@xxxxxxxxxxxxx>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux