Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-7433 ldlm: xattr locks are lost on mdt
[fs/lustre-release.git]
/
lustre
/
mdt
/
mdt_handler.c
diff --git
a/lustre/mdt/mdt_handler.c
b/lustre/mdt/mdt_handler.c
index
d8ddcdc
..
aafd3b1
100644
(file)
--- a/
lustre/mdt/mdt_handler.c
+++ b/
lustre/mdt/mdt_handler.c
@@
-3309,7
+3309,8
@@
static int mdt_intent_getxattr(enum mdt_it_code opcode,
{
struct mdt_lock_handle *lhc = &info->mti_lh[MDT_LH_RMT];
struct ldlm_reply *ldlm_rep = NULL;
- int rc, grc;
+ int rc;
+ ENTRY;
/*
* Initialize lhc->mlh_reg_lh either from a previously granted lock
@@
-3325,18
+3326,30
@@
static int mdt_intent_getxattr(enum mdt_it_code opcode,
return rc;
}
- grc = mdt_getxattr(info);
-
- rc = mdt_intent_lock_replace(info, lockp, lhc, flags, 0);
+ rc = mdt_getxattr(info);
if (mdt_info_req(info)->rq_repmsg != NULL)
ldlm_rep = req_capsule_server_get(info->mti_pill, &RMF_DLM_REP);
- if (ldlm_rep == NULL)
+
+ if (ldlm_rep == NULL ||
+ OBD_FAIL_CHECK(OBD_FAIL_MDS_XATTR_REP)) {
+ mdt_object_unlock(info, info->mti_object, lhc, 1);
RETURN(err_serious(-EFAULT));
+ }
- ldlm_rep->lock_policy_res2 =
grc
;
+ ldlm_rep->lock_policy_res2 =
clear_serious(rc)
;
- return rc;
+ /* This is left for interop instead of adding a new interop flag.
+ * LU-7433 */
+#if LUSTRE_VERSION_CODE > OBD_OCD_VERSION(3, 0, 0, 0)
+ if (ldlm_rep->lock_policy_res2) {
+ mdt_object_unlock(info, info->mti_object, lhc, 1);
+ RETURN(ELDLM_LOCK_ABORTED);
+ }
+#endif
+
+ rc = mdt_intent_lock_replace(info, lockp, lhc, flags, rc);
+ RETURN(rc);
}
static int mdt_intent_getattr(enum mdt_it_code opcode,