X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flmv%2Flmv_intent.c;h=08a5a609e3fdbdc8248407285703c763d2102ee3;hb=5a6aa0e6d1583cc0d4c82ae8c95fb7b9856d6284;hp=93e230e0ce253b61af25fa9f14a0ba4b8ddab4aa;hpb=5725559786086f328f4c899936967eb6e5dce46e;p=fs%2Flustre-release.git diff --git a/lustre/lmv/lmv_intent.c b/lustre/lmv/lmv_intent.c index 93e230e..08a5a60 100644 --- a/lustre/lmv/lmv_intent.c +++ b/lustre/lmv/lmv_intent.c @@ -15,11 +15,7 @@ * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. + * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ @@ -27,7 +23,7 @@ * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, 2014, Intel Corporation. + * Copyright (c) 2011, 2016, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -88,11 +84,11 @@ static int lmv_intent_remote(struct obd_export *exp, struct lookup_intent *it, /* * We got LOOKUP lock, but we really need attrs. */ - pmode = it->d.lustre.it_lock_mode; + pmode = it->it_lock_mode; if (pmode) { - plock.cookie = it->d.lustre.it_lock_handle; - it->d.lustre.it_lock_mode = 0; - it->d.lustre.it_data = NULL; + plock.cookie = it->it_lock_handle; + it->it_lock_mode = 0; + it->it_request = NULL; } LASSERT(fid_is_sane(&body->mbo_fid1)); @@ -129,15 +125,15 @@ static int lmv_intent_remote(struct obd_export *exp, struct lookup_intent *it, * maintain dcache consistency. Thus drop UPDATE|PERM lock here * and put LOOKUP in request. */ - if (it->d.lustre.it_lock_mode != 0) { - it->d.lustre.it_remote_lock_handle = - it->d.lustre.it_lock_handle; - it->d.lustre.it_remote_lock_mode = it->d.lustre.it_lock_mode; + if (it->it_lock_mode != 0) { + it->it_remote_lock_handle = + it->it_lock_handle; + it->it_remote_lock_mode = it->it_lock_mode; } if (pmode) { - it->d.lustre.it_lock_handle = plock.cookie; - it->d.lustre.it_lock_mode = pmode; + it->it_lock_handle = plock.cookie; + it->it_lock_mode = pmode; } EXIT; @@ -215,7 +211,7 @@ int lmv_revalidate_slaves(struct obd_export *exp, if (rc < 0) GOTO(cleanup, rc); - lockh = (struct lustre_handle *)&it.d.lustre.it_lock_handle; + lockh = (struct lustre_handle *)&it.it_lock_handle; if (rc > 0 && req == NULL) { /* slave inode is still valid */ CDEBUG(D_INODE, "slave "DFID" is still valid.\n", @@ -226,10 +222,10 @@ int lmv_revalidate_slaves(struct obd_export *exp, body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY); if (body == NULL) { - if (it.d.lustre.it_lock_mode && lockh) { + if (it.it_lock_mode && lockh) { ldlm_lock_decref(lockh, - it.d.lustre.it_lock_mode); - it.d.lustre.it_lock_mode = 0; + it.it_lock_mode); + it.it_lock_mode = 0; } GOTO(cleanup, rc = -ENOENT); } @@ -242,10 +238,10 @@ int lmv_revalidate_slaves(struct obd_export *exp, LTIME_S(inode->i_mtime) = body->mbo_mtime; } - md_set_lock_data(tgt->ltd_exp, &lockh->cookie, inode, NULL); - if (it.d.lustre.it_lock_mode != 0 && lockh != NULL) { - ldlm_lock_decref(lockh, it.d.lustre.it_lock_mode); - it.d.lustre.it_lock_mode = 0; + md_set_lock_data(tgt->ltd_exp, lockh, inode, NULL); + if (it.it_lock_mode != 0 && lockh != NULL) { + ldlm_lock_decref(lockh, it.it_lock_mode); + it.it_lock_mode = 0; } } @@ -323,9 +319,9 @@ static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data, * Nothing is found, do not access body->fid1 as it is zero and thus * pointless. */ - if ((it->d.lustre.it_disposition & DISP_LOOKUP_NEG) && - !(it->d.lustre.it_disposition & DISP_OPEN_CREATE) && - !(it->d.lustre.it_disposition & DISP_OPEN_OPEN)) + if ((it->it_disposition & DISP_LOOKUP_NEG) && + !(it->it_disposition & DISP_OPEN_CREATE) && + !(it->it_disposition & DISP_OPEN_OPEN)) RETURN(rc); body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY); @@ -424,7 +420,7 @@ lmv_intent_lookup(struct obd_export *exp, struct md_op_data *op_data, /* release the previous request */ ptlrpc_req_finished(*reqp); - it->d.lustre.it_data = NULL; + it->it_request = NULL; *reqp = NULL; oinfo = &lsm->lsm_md_oinfo[stripe_index]; @@ -436,7 +432,7 @@ lmv_intent_lookup(struct obd_export *exp, struct md_op_data *op_data, PFID(&oinfo->lmo_fid)); op_data->op_fid1 = oinfo->lmo_fid; - it->d.lustre.it_disposition &= ~DISP_ENQ_COMPLETE; + it->it_disposition &= ~DISP_ENQ_COMPLETE; rc = md_intent_lock(tgt->ltd_exp, op_data, it, reqp, cb_blocking, extra_lock_flags); if (rc != 0) @@ -444,6 +440,9 @@ lmv_intent_lookup(struct obd_export *exp, struct md_op_data *op_data, } } + if (!it_has_reply_body(it)) + RETURN(0); + /* * MDS has returned success. Probably name has been resolved in * remote inode. Let's check this. @@ -471,8 +470,7 @@ int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data, ldlm_blocking_callback cb_blocking, __u64 extra_lock_flags) { - struct obd_device *obd = exp->exp_obd; - int rc; + int rc; ENTRY; LASSERT(it != NULL); @@ -483,11 +481,7 @@ int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data, (int)op_data->op_namelen, op_data->op_name, PFID(&op_data->op_fid1)); - rc = lmv_check_connect(obd); - if (rc) - RETURN(rc); - - if (it->it_op & (IT_LOOKUP | IT_GETATTR | IT_LAYOUT)) + if (it->it_op & (IT_LOOKUP | IT_GETATTR | IT_LAYOUT | IT_GETXATTR)) rc = lmv_intent_lookup(exp, op_data, it, reqp, cb_blocking, extra_lock_flags); else if (it->it_op & IT_OPEN) @@ -499,23 +493,23 @@ int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data, if (rc < 0) { struct lustre_handle lock_handle; - if (it->d.lustre.it_lock_mode != 0) { - lock_handle.cookie = it->d.lustre.it_lock_handle; - ldlm_lock_decref(&lock_handle, - it->d.lustre.it_lock_mode); + if (it->it_lock_mode != 0) { + lock_handle.cookie = it->it_lock_handle; + ldlm_lock_decref_and_cancel(&lock_handle, + it->it_lock_mode); } - it->d.lustre.it_lock_handle = 0; - it->d.lustre.it_lock_mode = 0; + it->it_lock_handle = 0; + it->it_lock_mode = 0; - if (it->d.lustre.it_remote_lock_mode != 0) { - lock_handle.cookie = it->d.lustre.it_remote_lock_handle; - ldlm_lock_decref(&lock_handle, - it->d.lustre.it_remote_lock_mode); + if (it->it_remote_lock_mode != 0) { + lock_handle.cookie = it->it_remote_lock_handle; + ldlm_lock_decref_and_cancel(&lock_handle, + it->it_remote_lock_mode); } - it->d.lustre.it_remote_lock_handle = 0; - it->d.lustre.it_remote_lock_mode = 0; + it->it_remote_lock_handle = 0; + it->it_remote_lock_mode = 0; } RETURN(rc);