X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ffid%2Ffid_request.c;h=7b5d5452b6e6bf65d683ff3c8eb749307c956d4c;hb=e3056a0f2fc16154c8da175e60fa33709634b4c4;hp=c6c3881436ead78126dfacf9f1055b09079ecc70;hpb=b5624b418b645b1ac86e735413c9c7bbb93ef97c;p=fs%2Flustre-release.git diff --git a/lustre/fid/fid_request.c b/lustre/fid/fid_request.c index c6c3881..7b5d545 100644 --- a/lustre/fid/fid_request.c +++ b/lustre/fid/fid_request.c @@ -63,13 +63,13 @@ #include #include "fid_internal.h" -static int seq_client_rpc(struct lu_client_seq *seq, struct lu_range *input, - struct lu_range *output, __u32 opc, +static int seq_client_rpc(struct lu_client_seq *seq, + struct lu_seq_range *output, __u32 opc, const char *opcname) { struct obd_export *exp = seq->lcs_exp; struct ptlrpc_request *req; - struct lu_range *out, *in; + struct lu_seq_range *out, *in; __u32 *op; int rc; ENTRY; @@ -85,19 +85,20 @@ static int seq_client_rpc(struct lu_client_seq *seq, struct lu_range *input, /* Zero out input range, this is not recovery yet. */ in = req_capsule_client_get(&req->rq_pill, &RMF_SEQ_RANGE); - if (input != NULL) - *in = *input; - else - range_init(in); + range_init(in); ptlrpc_request_set_replen(req); if (seq->lcs_type == LUSTRE_SEQ_METADATA) { req->rq_request_portal = (opc == SEQ_ALLOC_SUPER) ? SEQ_CONTROLLER_PORTAL : SEQ_METADATA_PORTAL; + /* update mdt field of *in, it is required for fld update + * on super sequence allocator node. */ + if (opc == SEQ_ALLOC_SUPER) + in->lsr_mdt = seq->lcs_space.lsr_mdt; } else { - req->rq_request_portal = (opc == SEQ_ALLOC_SUPER) ? - SEQ_CONTROLLER_PORTAL : SEQ_DATA_PORTAL; + LASSERT(opc == SEQ_ALLOC_META); + req->rq_request_portal = SEQ_DATA_PORTAL; } ptlrpc_at_set_req_timeout(req); @@ -122,7 +123,6 @@ static int seq_client_rpc(struct lu_client_seq *seq, struct lu_range *input, DRANGE"]\n", seq->lcs_name, PRANGE(output)); GOTO(out_req, rc = -EINVAL); } - *in = *out; CDEBUG(D_INFO, "%s: Allocated %s-sequence "DRANGE"]\n", seq->lcs_name, opcname, PRANGE(output)); @@ -134,39 +134,30 @@ out_req: } /* Request sequence-controller node to allocate new super-sequence. */ -int seq_client_replay_super(struct lu_client_seq *seq, - struct lu_range *range, - const struct lu_env *env) +int seq_client_alloc_super(struct lu_client_seq *seq, + const struct lu_env *env) { int rc; ENTRY; - down(&seq->lcs_sem); + cfs_down(&seq->lcs_sem); #ifdef __KERNEL__ if (seq->lcs_srv) { LASSERT(env != NULL); - rc = seq_server_alloc_super(seq->lcs_srv, range, - &seq->lcs_space, env); + rc = seq_server_alloc_super(seq->lcs_srv, &seq->lcs_space, + env); } else { #endif - rc = seq_client_rpc(seq, range, &seq->lcs_space, + rc = seq_client_rpc(seq, &seq->lcs_space, SEQ_ALLOC_SUPER, "super"); #ifdef __KERNEL__ } #endif - up(&seq->lcs_sem); + cfs_up(&seq->lcs_sem); RETURN(rc); } -/* Request sequence-controller node to allocate new super-sequence. */ -int seq_client_alloc_super(struct lu_client_seq *seq, - const struct lu_env *env) -{ - ENTRY; - RETURN(seq_client_replay_super(seq, NULL, env)); -} - /* Request sequence-controller node to allocate new meta-sequence. */ static int seq_client_alloc_meta(struct lu_client_seq *seq, const struct lu_env *env) @@ -177,11 +168,10 @@ static int seq_client_alloc_meta(struct lu_client_seq *seq, #ifdef __KERNEL__ if (seq->lcs_srv) { LASSERT(env != NULL); - rc = seq_server_alloc_meta(seq->lcs_srv, NULL, - &seq->lcs_space, env); + rc = seq_server_alloc_meta(seq->lcs_srv, &seq->lcs_space, env); } else { #endif - rc = seq_client_rpc(seq, NULL, &seq->lcs_space, + rc = seq_client_rpc(seq, &seq->lcs_space, SEQ_ALLOC_META, "meta"); #ifdef __KERNEL__ } @@ -212,8 +202,8 @@ static int seq_client_alloc_seq(struct lu_client_seq *seq, seqno_t *seqnr) } LASSERT(!range_is_exhausted(&seq->lcs_space)); - *seqnr = seq->lcs_space.lr_start; - seq->lcs_space.lr_start += 1; + *seqnr = seq->lcs_space.lsr_start; + seq->lcs_space.lsr_start += 1; CDEBUG(D_INFO, "%s: Allocated sequence ["LPX64"]\n", seq->lcs_name, *seqnr); @@ -230,7 +220,7 @@ int seq_client_alloc_fid(struct lu_client_seq *seq, struct lu_fid *fid) LASSERT(seq != NULL); LASSERT(fid != NULL); - down(&seq->lcs_sem); + cfs_down(&seq->lcs_sem); if (fid_is_zero(&seq->lcs_fid) || fid_oid(&seq->lcs_fid) >= seq->lcs_width) @@ -241,7 +231,7 @@ int seq_client_alloc_fid(struct lu_client_seq *seq, struct lu_fid *fid) if (rc) { CERROR("%s: Can't allocate new sequence, " "rc %d\n", seq->lcs_name, rc); - up(&seq->lcs_sem); + cfs_up(&seq->lcs_sem); RETURN(rc); } @@ -264,7 +254,7 @@ int seq_client_alloc_fid(struct lu_client_seq *seq, struct lu_fid *fid) } *fid = seq->lcs_fid; - up(&seq->lcs_sem); + cfs_up(&seq->lcs_sem); CDEBUG(D_INFO, "%s: Allocated FID "DFID"\n", seq->lcs_name, PFID(fid)); RETURN(rc); @@ -278,10 +268,17 @@ EXPORT_SYMBOL(seq_client_alloc_fid); void seq_client_flush(struct lu_client_seq *seq) { LASSERT(seq != NULL); - down(&seq->lcs_sem); + cfs_down(&seq->lcs_sem); fid_zero(&seq->lcs_fid); + /** + * this id shld not be used for seq range allocation. + * set to -1 for dgb check. + */ + + seq->lcs_space.lsr_mdt = -1; + range_init(&seq->lcs_space); - up(&seq->lcs_sem); + cfs_up(&seq->lcs_sem); } EXPORT_SYMBOL(seq_client_flush); @@ -356,7 +353,7 @@ int seq_client_init(struct lu_client_seq *seq, seq->lcs_exp = exp; seq->lcs_srv = srv; seq->lcs_type = type; - sema_init(&seq->lcs_sem, 1); + cfs_sema_init(&seq->lcs_sem, 1); seq->lcs_width = LUSTRE_SEQ_MAX_WIDTH; /* Make sure that things are clear before work is started. */