X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdt%2Fmdt_lib.c;h=9e64d59fa81145aba2d739208f2eb499e68a05b7;hb=88dd29f38769744eac20b06e1baac52872bf423f;hp=e95f2c7f6a352f080273decd795220b8760efa94;hpb=c80a756a34b59421e124899c1565f9b25763b6c9;p=fs%2Flustre-release.git diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index e95f2c7..9e64d59 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -70,7 +70,7 @@ void mdt_exit_ucred(struct mdt_thread_info *info) if (uc->mu_valid != UCRED_INIT) { uc->mu_suppgids[0] = uc->mu_suppgids[1] = -1; if (uc->mu_ginfo) { - put_group_info(uc->mu_ginfo); + cfs_put_group_info(uc->mu_ginfo); uc->mu_ginfo = NULL; } if (uc->mu_identity) { @@ -82,15 +82,15 @@ void mdt_exit_ucred(struct mdt_thread_info *info) } } -static int match_nosquash_list(struct rw_semaphore *sem, - struct list_head *nidlist, +static int match_nosquash_list(cfs_rw_semaphore_t *sem, + cfs_list_t *nidlist, lnet_nid_t peernid) { int rc; ENTRY; - down_read(sem); + cfs_down_read(sem); rc = cfs_match_nid(peernid, nidlist); - up_read(sem); + cfs_up_read(sem); RETURN(rc); } @@ -251,7 +251,7 @@ static int new_init_ucred(struct mdt_thread_info *info, ucred_init_type_t type, if (!remote && perm & CFS_SETGRP_PERM) { if (pud->pud_ngroups) { /* setgroups for local client */ - ucred->mu_ginfo = groups_alloc(pud->pud_ngroups); + ucred->mu_ginfo = cfs_groups_alloc(pud->pud_ngroups); if (!ucred->mu_ginfo) { CERROR("failed to alloc %d groups\n", pud->pud_ngroups); @@ -293,7 +293,7 @@ static int new_init_ucred(struct mdt_thread_info *info, ucred_init_type_t type, out: if (rc) { if (ucred->mu_ginfo) { - put_group_info(ucred->mu_ginfo); + cfs_put_group_info(ucred->mu_ginfo); ucred->mu_ginfo = NULL; } if (ucred->mu_identity) { @@ -542,7 +542,7 @@ void mdt_dump_lmm(int level, const struct lov_mds_md *lmm) for (i = 0, lod = lmm->lmm_objects; i < stripe_count; i++, lod++) { CDEBUG(level, "stripe %u idx %u subobj "LPX64"/"LPX64"\n", i, le32_to_cpu(lod->l_ost_idx), - le64_to_cpu(lod->l_object_gr), + le64_to_cpu(lod->l_object_seq), le64_to_cpu(lod->l_object_id)); } } @@ -572,10 +572,10 @@ void mdt_shrink_reply(struct mdt_thread_info *info) } CDEBUG(D_INFO, "Shrink to md_size = %d cookie/acl_size = %d" - " MDSCAPA = "LPX64", OSSCAPA = "LPX64"\n", + " MDSCAPA = %llx, OSSCAPA = %llx\n", md_size, acl_size, - body->valid & OBD_MD_FLMDSCAPA, - body->valid & OBD_MD_FLOSSCAPA); + (unsigned long long)(body->valid & OBD_MD_FLMDSCAPA), + (unsigned long long)(body->valid & OBD_MD_FLOSSCAPA)); /* &RMF_MDT_BODY, &RMF_MDT_MD, @@ -742,10 +742,16 @@ static __u64 mdt_attr_valid_xlate(__u64 in, struct mdt_reint_record *rr, if (in & ATTR_ATTR_FLAG) out |= LA_FLAGS; + if (in & ATTR_KILL_SUID) + out |= LA_KILL_SUID; + + if (in & ATTR_KILL_SGID) + out |= LA_KILL_SGID; + if (in & MDS_OPEN_OWNEROVERRIDE) ma->ma_attr_flags |= MDS_OPEN_OWNEROVERRIDE; - if (in & (ATTR_KILL_SUID|ATTR_KILL_SGID)) + if (in & ATTR_FORCE) ma->ma_attr_flags |= MDS_PERM_BYPASS; /*XXX need ATTR_RAW?*/ @@ -755,7 +761,7 @@ static __u64 mdt_attr_valid_xlate(__u64 in, struct mdt_reint_record *rr, ATTR_ATTR_FLAG|ATTR_RAW|MDS_OPEN_OWNEROVERRIDE| ATTR_FORCE|ATTR_KILL_SUID|ATTR_KILL_SGID); if (in != 0) - CERROR("Unknown attr bits: %#llx\n", in); + CERROR("Unknown attr bits: "LPX64"\n", in); return out; } /* unpacking */ @@ -801,16 +807,17 @@ static int mdt_setattr_unpack_rec(struct mdt_thread_info *info) RETURN(0); } -static int mdt_epoch_unpack(struct mdt_thread_info *info) +static int mdt_ioepoch_unpack(struct mdt_thread_info *info) { struct req_capsule *pill = info->mti_pill; ENTRY; if (req_capsule_get_size(pill, &RMF_MDT_EPOCH, RCL_CLIENT)) - info->mti_epoch = req_capsule_client_get(pill, &RMF_MDT_EPOCH); + info->mti_ioepoch = + req_capsule_client_get(pill, &RMF_MDT_EPOCH); else - info->mti_epoch = NULL; - RETURN(info->mti_epoch == NULL ? -EFAULT : 0); + info->mti_ioepoch = NULL; + RETURN(info->mti_ioepoch == NULL ? -EFAULT : 0); } static inline int mdt_dlmreq_unpack(struct mdt_thread_info *info) { @@ -837,7 +844,7 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info) RETURN(rc); /* Epoch may be absent */ - mdt_epoch_unpack(info); + mdt_ioepoch_unpack(info); ma->ma_lmm_size = req_capsule_get_size(pill, &RMF_EADATA, RCL_CLIENT); if (ma->ma_lmm_size) { @@ -861,7 +868,7 @@ int mdt_close_unpack(struct mdt_thread_info *info) int rc; ENTRY; - rc = mdt_epoch_unpack(info); + rc = mdt_ioepoch_unpack(info); if (rc) RETURN(rc); @@ -902,7 +909,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info) attr->la_valid = LA_MODE | LA_RDEV | LA_UID | LA_GID | LA_CTIME | LA_MTIME | LA_ATIME; memset(&sp->u, 0, sizeof(sp->u)); - sp->sp_cr_flags = rec->cr_flags; + sp->sp_cr_flags = get_mrc_cr_flags(rec); sp->sp_ck_split = !!(rec->cr_bias & MDS_CHECK_SPLIT); info->mti_cross_ref = !!(rec->cr_bias & MDS_CROSS_REF); @@ -913,7 +920,8 @@ static int mdt_create_unpack(struct mdt_thread_info *info) if (!info->mti_cross_ref) { rr->rr_name = req_capsule_client_get(pill, &RMF_NAME); - rr->rr_namelen = req_capsule_get_size(pill, &RMF_NAME, RCL_CLIENT) - 1; + rr->rr_namelen = req_capsule_get_size(pill, &RMF_NAME, + RCL_CLIENT) - 1; LASSERT(rr->rr_name && rr->rr_namelen > 0); } else { rr->rr_name = NULL; @@ -1070,8 +1078,7 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info) else ma->ma_attr_flags &= ~MDS_VTX_BYPASS; - if (lustre_msg_get_flags(mdt_info_req(info)->rq_reqmsg) & MSG_REPLAY) - info->mti_spec.no_create = 1; + info->mti_spec.no_create = !!req_is_replay(mdt_info_req(info)); rc = mdt_dlmreq_unpack(info); RETURN(rc); @@ -1131,8 +1138,7 @@ static int mdt_rename_unpack(struct mdt_thread_info *info) else ma->ma_attr_flags &= ~MDS_VTX_BYPASS; - if (lustre_msg_get_flags(mdt_info_req(info)->rq_reqmsg) & MSG_REPLAY) - info->mti_spec.no_create = 1; + info->mti_spec.no_create = !!req_is_replay(mdt_info_req(info)); rc = mdt_dlmreq_unpack(info); RETURN(rc); @@ -1173,7 +1179,10 @@ static int mdt_open_unpack(struct mdt_thread_info *info) attr->la_valid = LA_MODE | LA_RDEV | LA_UID | LA_GID | LA_CTIME | LA_MTIME | LA_ATIME; memset(&info->mti_spec.u, 0, sizeof(info->mti_spec.u)); - info->mti_spec.sp_cr_flags = rec->cr_flags; + info->mti_spec.sp_cr_flags = get_mrc_cr_flags(rec); + /* Do not trigger ASSERTION if client miss to set such flags. */ + if (unlikely(info->mti_spec.sp_cr_flags == 0)) + RETURN(-EPROTO); info->mti_replayepoch = rec->cr_ioepoch; info->mti_spec.sp_ck_split = !!(rec->cr_bias & MDS_CHECK_SPLIT); @@ -1182,8 +1191,8 @@ static int mdt_open_unpack(struct mdt_thread_info *info) if (req_capsule_get_size(pill, &RMF_CAPA1, RCL_CLIENT)) mdt_set_capainfo(info, 0, rr->rr_fid1, req_capsule_client_get(pill, &RMF_CAPA1)); - if ((lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) && - (req_capsule_get_size(pill, &RMF_CAPA2, RCL_CLIENT))) { + if (req_is_replay(req) && + req_capsule_get_size(pill, &RMF_CAPA2, RCL_CLIENT)) { #if 0 mdt_set_capainfo(info, 1, rr->rr_fid2, req_capsule_client_get(pill, &RMF_CAPA2)); @@ -1206,8 +1215,7 @@ static int mdt_open_unpack(struct mdt_thread_info *info) RCL_CLIENT); if (sp->u.sp_ea.eadatalen) { sp->u.sp_ea.eadata = req_capsule_client_get(pill, &RMF_EADATA); - if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) - sp->no_create = 1; + sp->no_create = !!req_is_replay(req); } RETURN(0);