Whamcloud - gitweb
EX-7786 test: get size before fallback to generic
authorMikhail Pershin <mpershin@whamcloud.com>
Tue, 4 Jul 2023 19:13:58 +0000 (22:13 +0300)
committerAndreas Dilger <adilger@whamcloud.com>
Sun, 16 Jul 2023 23:10:09 +0000 (23:10 +0000)
If ll_file_seek() falls back to generic_file_llseek_size()
then make sure inode size is reliable

Test-Parameters: testlist=sanity env=ONLY=460f,ONLY_REPEAT=4 clientdistro=el9.1
Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: Ieb8c90e66fb19675ba41f0147c0d9cdaf29ea20a
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/51564
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/llite/file.c

index 8006b8f..62a71e2 100644 (file)
@@ -4826,12 +4826,16 @@ static loff_t ll_file_seek(struct file *file, loff_t offset, int origin)
                                   CL_FSYNC_LOCAL, 0);
 
                retval = ll_lseek(file, offset, origin);
-               if (retval >= 0)
+               if (retval >= 0) {
                        retval = vfs_setpos(file, retval, maxbytes);
-               else if (retval == -EOPNOTSUPP)
+               } else if (retval == -EOPNOTSUPP) {
+                       retval = ll_glimpse_size(inode);
+                       if (retval)
+                               RETURN(retval);
                        retval = generic_file_llseek_size(file, offset,
                                                          origin, maxbytes,
                                                          i_size_read(inode));
+               }
        } else {
                retval = generic_file_llseek_size(file, offset, origin,
                                                  maxbytes, eof);