Whamcloud - gitweb
LU-11148 ldlm: enable trybits for PDO lock 20/32820/4
authorLai Siyao <lai.siyao@intel.com>
Sat, 23 Jun 2018 09:06:15 +0000 (17:06 +0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 6 Aug 2018 14:34:45 +0000 (14:34 +0000)
When trybits was added (in LU-9148), it doesn't enable trybits for
PDO lock in mdt_object_local_lock(), which may cause deadlock in
try_lock.

Signed-off-by: Lai Siyao <lai.siyao@intel.com>
Change-Id: Icfca639cfbd84e1a3bc25d91de0460d2951c2c2b
Reviewed-on: https://review.whamcloud.com/32820
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/mdt/mdt_handler.c

index fb3f648..cd7448e 100644 (file)
@@ -2891,8 +2891,13 @@ static int mdt_object_local_lock(struct mdt_thread_info *info,
                         * is never going to be sent to client and we do not
                         * want it slowed down due to possible cancels.
                         */
-                       policy->l_inodebits.bits = MDS_INODELOCK_UPDATE;
-                       policy->l_inodebits.try_bits = 0;
+                       policy->l_inodebits.bits =
+                               *ibits & MDS_INODELOCK_UPDATE;
+                       policy->l_inodebits.try_bits =
+                               trybits & MDS_INODELOCK_UPDATE;
+                       /* at least one of them should be set */
+                       LASSERT(policy->l_inodebits.bits |
+                               policy->l_inodebits.try_bits);
                        rc = mdt_fid_lock(ns, &lh->mlh_pdo_lh, lh->mlh_pdo_mode,
                                          policy, res_id, dlmflags,
                                          info->mti_exp == NULL ? NULL :