mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 06:55:20 +07:00
staging: lustre: mdc: handle IT_READDIR operations
The readdir operations lock was incomplete. This patch fills in the missing pieces. Signed-off-by: wang di <di.wang@intel.com> Reviewed-on: http://review.whamcloud.com/7043 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3531 Reviewed-by: John L. Hammond <john.hammond@intel.com> Reviewed-by: Jinshan Xiong <jinshan.xiong@intel.com> Reviewed-by: Andreas Dilger <andreas.dilger@intel.com> Reviewed-by: Oleg Drokin <oleg.drokin@intel.com> Signed-off-by: James Simmons <jsimmons@infradead.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8e9dfe8a22
commit
34a60457a8
@ -801,9 +801,11 @@ static inline int it_to_lock_mode(struct lookup_intent *it)
|
||||
/* CREAT needs to be tested before open (both could be set) */
|
||||
if (it->it_op & IT_CREAT)
|
||||
return LCK_CW;
|
||||
else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_LOOKUP |
|
||||
else if (it->it_op & (IT_GETATTR | IT_OPEN | IT_LOOKUP |
|
||||
IT_LAYOUT))
|
||||
return LCK_CR;
|
||||
else if (it->it_op & IT_READDIR)
|
||||
return LCK_PR;
|
||||
else if (it->it_op & IT_GETXATTR)
|
||||
return LCK_PR;
|
||||
else if (it->it_op & IT_SETXATTR)
|
||||
|
@ -903,6 +903,9 @@ static int mdc_finish_intent_lock(struct obd_export *exp,
|
||||
LASSERT(request != LP_POISON);
|
||||
LASSERT(request->rq_repmsg != LP_POISON);
|
||||
|
||||
if (it->it_op & IT_READDIR)
|
||||
return 0;
|
||||
|
||||
if (!it_disposition(it, DISP_IT_EXECD)) {
|
||||
/* The server failed before it even started executing the
|
||||
* intent, i.e. because it couldn't unpack the request.
|
||||
@ -1042,6 +1045,9 @@ int mdc_revalidate_lock(struct obd_export *exp, struct lookup_intent *it,
|
||||
MDS_INODELOCK_LOOKUP |
|
||||
MDS_INODELOCK_PERM;
|
||||
break;
|
||||
case IT_READDIR:
|
||||
policy.l_inodebits.bits = MDS_INODELOCK_UPDATE;
|
||||
break;
|
||||
case IT_LAYOUT:
|
||||
policy.l_inodebits.bits = MDS_INODELOCK_LAYOUT;
|
||||
break;
|
||||
@ -1119,7 +1125,7 @@ int mdc_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
|
||||
|
||||
lockh.cookie = 0;
|
||||
if (fid_is_sane(&op_data->op_fid2) &&
|
||||
(it->it_op & (IT_LOOKUP | IT_GETATTR))) {
|
||||
(it->it_op & (IT_LOOKUP | IT_GETATTR | IT_READDIR))) {
|
||||
/* We could just return 1 immediately, but since we should only
|
||||
* be called in revalidate_it if we already have a lock, let's
|
||||
* verify that.
|
||||
|
Loading…
Reference in New Issue
Block a user