From: Di Wang Date: Sat, 12 Dec 2015 08:36:08 +0000 (-0800) Subject: LU-7549 mdt: cancel the atomic lock in the same thread X-Git-Tag: 2.7.65~44 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=6804fa782f66666b48aeab993fce11a7f88c9c0e;p=fs%2Flustre-release.git LU-7549 mdt: cancel the atomic lock in the same thread If cross-MDT lock has ATOMIC_CB flag, let's cancel it in the same thread as blocking_ast(), to make sure the lock is cancelled completely after unlock(). This will be used when MDT tries to cancel remote locks during migration (see mdt_lock_objects_in_linkea()). Only if the remote lock is cancelled completely, then the next trylock will succeed. Signed-off-by: Di Wang Change-Id: Ib23eb8eb312252e6eca680d08f8fcd89cf29339c Reviewed-on: http://review.whamcloud.com/17577 Tested-by: Jenkins Reviewed-by: Lai Siyao Tested-by: Maloo Reviewed-by: Fan Yong Reviewed-by: Oleg Drokin --- diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index d462496..9c0c406 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -2259,7 +2259,8 @@ int mdt_remote_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc, switch (flag) { case LDLM_CB_BLOCKING: ldlm_lock2handle(lock, &lockh); - rc = ldlm_cli_cancel(&lockh, LCF_ASYNC); + rc = ldlm_cli_cancel(&lockh, + ldlm_is_atomic_cb(lock) ? 0 : LCF_ASYNC); if (rc < 0) { CDEBUG(D_INODE, "ldlm_cli_cancel: %d\n", rc); RETURN(rc); diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 2ad5259..1dbae87 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -1340,8 +1340,9 @@ again: if (rc == 0) { mdt_unlock_list(info, lock_list, rc); - CDEBUG(D_INFO, "%s: busy lock on "DFID".\n", - mdt_obd_name(mdt), PFID(&fid)); + CDEBUG(D_INFO, "%s: busy lock on "DFID" %s retry %d\n", + mdt_obd_name(mdt), PFID(&fid), name.ln_name, + retry_count); if (retry_count == 0) { mdt_object_put(info->mti_env, mdt_pobj);