@@ -3213,6 +3213,9 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
32133213 cfile -> fid .volatile_fid , cfile -> pid , new_size );
32143214 if (rc >= 0 ) {
32153215 truncate_setsize (inode , new_size );
3216+ netfs_resize_file (& cifsi -> netfs , new_size , true);
3217+ if (offset < cifsi -> netfs .zero_point )
3218+ cifsi -> netfs .zero_point = offset ;
32163219 fscache_resize_cookie (cifs_inode_cookie (inode ), new_size );
32173220 }
32183221 }
@@ -3436,7 +3439,7 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
34363439 rc = SMB2_set_eof (xid , tcon , cfile -> fid .persistent_fid ,
34373440 cfile -> fid .volatile_fid , cfile -> pid , new_eof );
34383441 if (rc == 0 ) {
3439- cifsi -> server_eof = new_eof ;
3442+ netfs_resize_file ( & cifsi -> netfs , new_eof , true) ;
34403443 cifs_setsize (inode , new_eof );
34413444 cifs_truncate_page (inode -> i_mapping , inode -> i_size );
34423445 truncate_setsize (inode , new_eof );
@@ -3528,8 +3531,9 @@ static long smb3_collapse_range(struct file *file, struct cifs_tcon *tcon,
35283531 int rc ;
35293532 unsigned int xid ;
35303533 struct inode * inode = file_inode (file );
3531- struct cifsFileInfo * cfile = file -> private_data ;
35323534 struct cifsInodeInfo * cifsi = CIFS_I (inode );
3535+ struct cifsFileInfo * cfile = file -> private_data ;
3536+ struct netfs_inode * ictx = & cifsi -> netfs ;
35333537 loff_t old_eof , new_eof ;
35343538
35353539 xid = get_xid ();
@@ -3549,6 +3553,7 @@ static long smb3_collapse_range(struct file *file, struct cifs_tcon *tcon,
35493553 goto out_2 ;
35503554
35513555 truncate_pagecache_range (inode , off , old_eof );
3556+ ictx -> zero_point = old_eof ;
35523557
35533558 rc = smb2_copychunk_range (xid , cfile , cfile , off + len ,
35543559 old_eof - off - len , off );
@@ -3563,9 +3568,10 @@ static long smb3_collapse_range(struct file *file, struct cifs_tcon *tcon,
35633568
35643569 rc = 0 ;
35653570
3566- cifsi -> server_eof = i_size_read (inode ) - len ;
3567- truncate_setsize (inode , cifsi -> server_eof );
3568- fscache_resize_cookie (cifs_inode_cookie (inode ), cifsi -> server_eof );
3571+ truncate_setsize (inode , new_eof );
3572+ netfs_resize_file (& cifsi -> netfs , new_eof , true);
3573+ ictx -> zero_point = new_eof ;
3574+ fscache_resize_cookie (cifs_inode_cookie (inode ), new_eof );
35693575out_2 :
35703576 filemap_invalidate_unlock (inode -> i_mapping );
35713577 out :
@@ -3581,6 +3587,7 @@ static long smb3_insert_range(struct file *file, struct cifs_tcon *tcon,
35813587 unsigned int xid ;
35823588 struct cifsFileInfo * cfile = file -> private_data ;
35833589 struct inode * inode = file_inode (file );
3590+ struct cifsInodeInfo * cifsi = CIFS_I (inode );
35843591 __u64 count , old_eof , new_eof ;
35853592
35863593 xid = get_xid ();
@@ -3608,6 +3615,7 @@ static long smb3_insert_range(struct file *file, struct cifs_tcon *tcon,
36083615 goto out_2 ;
36093616
36103617 truncate_setsize (inode , new_eof );
3618+ netfs_resize_file (& cifsi -> netfs , i_size_read (inode ), true);
36113619 fscache_resize_cookie (cifs_inode_cookie (inode ), i_size_read (inode ));
36123620
36133621 rc = smb2_copychunk_range (xid , cfile , cfile , off , count , off + len );
0 commit comments