Whamcloud - gitweb
LU-1488 mdc: fix fid_res_name_eq() issue.
authoryangsheng <ys@whamcloud.com>
Sun, 5 Aug 2012 19:42:48 +0000 (03:42 +0800)
committerJohann Lombardi <johann@whamcloud.com>
Fri, 17 Aug 2012 13:01:38 +0000 (09:01 -0400)
Original error message:
LustreError: 25302:0:(namei.c:256:ll_mdc_blocking_ast())
ns: lustre-MDT0000-mdc-ffff81021762a000 lock:
The issue cause by commit ef8bd11416bae8c03a65682f3a10a4da39922b45.
fid_res_name_eq() use wrong way to compare fid & res_name.

Signed-off-by: yang sheng <ys@whamcloud.com>
Change-Id: Iacba148b6c3ba7fa775d2b9a4a58bdbf67434d7c
Reviewed-on: http://review.whamcloud.com/3522
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Fan Yong <yong.fan@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
lustre/mdc/mdc_fid.c

index 1dc3922..f82ee52 100644 (file)
@@ -412,12 +412,8 @@ EXPORT_SYMBOL(fid_build_reg_res_name);
  */
 int fid_res_name_eq(const struct lu_fid *f, const struct ldlm_res_id *name)
 {
-        int ret;
-
-        ret = name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
-              name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_oid(f);
-        if (!fid_is_igif(f))
-                ret &= name->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver(f);
-        return ret;
+       return name->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(f) &&
+              name->name[LUSTRE_RES_ID_VER_OID_OFF] ==
+              (fid_oid(f) | (fid_is_igif(f) ? 0 : (__u64)fid_ver(f)<<32));
 }
 EXPORT_SYMBOL(fid_res_name_eq);