Whamcloud - gitweb
LU-11275 llite: check truncate race for DOM pages 87/33087/2
authorMikhail Pershin <mpershin@whamcloud.com>
Tue, 28 Aug 2018 10:06:21 +0000 (13:06 +0300)
committerOleg Drokin <green@whamcloud.com>
Tue, 4 Sep 2018 03:48:10 +0000 (03:48 +0000)
In ll_dom_finish_open() check vmpage mapping still
exists after locking and exit otherwise. This can
happen if page has been truncated concurrently.

Signed-off-by: Mikhail Pershin <mpershin@whamcloud.com>
Change-Id: Ib6ef551673a40ad99baaa9bd620225c65ce34454
Reviewed-on: https://review.whamcloud.com/33087
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
lustre/llite/file.c

index 8bfdf21..b7c3a63 100644 (file)
@@ -484,6 +484,12 @@ void ll_dom_finish_open(struct inode *inode, struct ptlrpc_request *req,
                        break;
                }
                lock_page(vmpage);
+               if (vmpage->mapping == NULL) {
+                       unlock_page(vmpage);
+                       put_page(vmpage);
+                       /* page was truncated */
+                       GOTO(out_io, rc = -ENODATA);
+               }
                clp = cl_page_find(env, obj, vmpage->index, vmpage,
                                   CPT_CACHEABLE);
                if (IS_ERR(clp)) {