X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmds%2Fmds_lmv.c;h=df80c75c9afc991f5fae55fc7132f6886a255d9a;hb=c39489126f88bb5b30643ebb11c72fbe9f9d2241;hp=30ae15bd7c32dc82823a42bb05cb0656e3ef2ba9;hpb=75119e08862a37c6ebb957b38b39da2bb7857289;p=fs%2Flustre-release.git diff --git a/lustre/mds/mds_lmv.c b/lustre/mds/mds_lmv.c index 30ae15b..df80c75 100644 --- a/lustre/mds/mds_lmv.c +++ b/lustre/mds/mds_lmv.c @@ -238,7 +238,7 @@ static int dc_new_page_to_cache(struct dir_cache * dirc) page = alloc_page(GFP_KERNEL); if (page == NULL) return -ENOMEM; - list_add_tail(&page->list, &dirc->list); + list_add_tail(&page->lru, &dirc->list); dirc->cur = page_address(page); dirc->free = PAGE_SIZE; return 0; @@ -301,13 +301,13 @@ static int flush_buffer_onto_mds(struct dirsplit_control *dc, int mdsnum) list_for_each_safe(cur, tmp, &ca->list) { struct page *page; - page = list_entry(cur, struct page, list); + page = list_entry(cur, struct page, lru); LASSERT(page != NULL); retrieve_generation_numbers(dc, page_address(page)); ca->brwc.pg = page; - ca->brwc.off = 0; + ca->brwc.disk_offset = ca->brwc.page_offset = 0; ca->brwc.count = PAGE_SIZE; ca->brwc.flag = 0; ca->oa.o_mds = mdsnum; @@ -334,7 +334,7 @@ static int remove_entries_from_orig_dir(struct dirsplit_control *dc, int mdsnum) ca = dc->cache + mdsnum; list_for_each_safe(cur, tmp, &ca->list) { - page = list_entry(cur, struct page, list); + page = list_entry(cur, struct page, lru); buf = page_address(page); end = buf + PAGE_SIZE; @@ -478,8 +478,8 @@ cleanup: continue; list_for_each_safe(cur, tmp, &dc.cache[i].list) { struct page *page; - page = list_entry(cur, struct page, list); - list_del(&page->list); + page = list_entry(cur, struct page, lru); + list_del(&page->lru); __free_page(page); } } @@ -1016,11 +1016,19 @@ int mds_lock_and_check_slave(int offset, struct ptlrpc_request *req, struct dentry *dentry = NULL; struct lvfs_run_ctxt saved; int cleanup_phase = 0; + struct mds_req_sec_desc *rsd; struct mds_body *body; struct lvfs_ucred uc; int rc, update_mode; ENTRY; + rsd = lustre_swab_mds_secdesc(req, MDS_REQ_SECDESC_OFF); + if (!rsd) { + CERROR("Can't unpack security desc\n"); + GOTO(cleanup, rc = -EFAULT); + } + mds_squash_root(&obd->u.mds, rsd, &req->rq_peer.peer_id.nid); + body = lustre_swab_reqbuf(req, offset, sizeof(*body), lustre_swab_mds_body); if (body == NULL) { @@ -1041,11 +1049,12 @@ int mds_lock_and_check_slave(int offset, struct ptlrpc_request *req, LASSERT(S_ISDIR(dentry->d_inode->i_mode)); - uc.luc_fsuid = body->fsuid; - uc.luc_fsgid = body->fsgid; - uc.luc_cap = body->capability; - uc.luc_suppgid1 = body->suppgid; - uc.luc_suppgid2 = -1; + rc = mds_init_ucred(&uc, rsd); + if (rc) { + CERROR("can't init ucred\n"); + GOTO(cleanup, rc); + } + push_ctxt(&saved, &obd->obd_lvfs_ctxt, &uc); rc = 0; @@ -1059,6 +1068,7 @@ cleanup: ldlm_lock_decref(lockh, LCK_EX); l_dput(dentry); pop_ctxt(&saved, &obd->obd_lvfs_ctxt, &uc); + mds_exit_ucred(&uc); default: break; }