cl_page_make_ready() calls cl_page_io_start() without vmpage lock
protection, and that could mess up cl_page's cp_state/cp_owner.
Signed-off-by: Bobi Jam <bobijam@whamcloud.com>
Change-Id: Id0df7e14246aa561494a9b6e581cebc55241c4b9
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/50180
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
enum cl_req_type crt)
{
struct page *vmpage = cp->cp_vmpage;
+ bool unlock = false;
int rc;
ENTRY;
GOTO(out, rc = 0);
lock_page(vmpage);
+ unlock = true;
if (clear_page_dirty_for_io(vmpage)) {
LASSERT(cp->cp_state == CPS_CACHED);
LBUG();
}
- unlock_page(vmpage);
out:
if (rc == 0) {
PASSERT(env, cp, cp->cp_state == CPS_CACHED);
cl_page_io_start(env, cp, crt);
}
+ if (unlock)
+ unlock_page(vmpage);
+
CL_PAGE_HEADER(D_TRACE, env, cp, "%d %d\n", crt, rc);
return rc;