Details
-
Bug
-
Resolution: Fixed
-
Minor
-
Lustre 2.7.0
-
3
-
14971
Description
In mdt_object_local_lock() we should call mdt_object_unlock() if mdt_fid_lock() fails on the pdo lock. This is because ldlm_cli_enqueue_local() stores the cookie in the lock handle very early on.
rc = mdt_fid_lock(ns, &lh->mlh_pdo_lh, lh->mlh_pdo_mode,
policy, res_id, dlmflags,
info->mti_exp == NULL ? NULL :
&info->mti_exp->exp_handle.h_cookie);
if (unlikely(rc))
RETURN(rc);
Currently if mdt_fid_lock() fails then we are likely to see
(mdt_handler.c:2782:mdt_lock_handle_fini()) ASSERTION( !lustre_handle_is_used(&lh->mlh_pdo_lh) ) failed
at the end of the handler.
This was found via memory allocation fault injection.