X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ffid%2Ffid_handler.c;h=e85d0efa37379d9f0e60569d03b46fd24b99e885;hb=refs%2Ftags%2F1.10.0.41a;hp=4b32cda3b02c943b9cef7af3f55c13bc944fd7c9;hpb=1250048239095bfe968757492c6c357027b12a1c;p=fs%2Flustre-release.git diff --git a/lustre/fid/fid_handler.c b/lustre/fid/fid_handler.c index 4b32cda..e85d0ef 100644 --- a/lustre/fid/fid_handler.c +++ b/lustre/fid/fid_handler.c @@ -74,7 +74,7 @@ int seq_server_set_cli(struct lu_server_seq *seq, * Ask client for new range, assign that range to ->seq_space and write * seq state to backing store should be atomic. */ - down(&seq->lss_sem); + cfs_down(&seq->lss_sem); if (cli == NULL) { CDEBUG(D_INFO, "%s: Detached sequence client %s\n", @@ -96,7 +96,7 @@ int seq_server_set_cli(struct lu_server_seq *seq, cli->lcs_space.lsr_mdt = seq->lss_site->ms_node_id; EXIT; out_up: - up(&seq->lss_sem); + cfs_up(&seq->lss_sem); return rc; } EXPORT_SYMBOL(seq_server_set_cli); @@ -185,9 +185,9 @@ int seq_server_alloc_super(struct lu_server_seq *seq, int rc; ENTRY; - down(&seq->lss_sem); + cfs_down(&seq->lss_sem); rc = __seq_server_alloc_super(seq, in, out, env); - up(&seq->lss_sem); + cfs_up(&seq->lss_sem); RETURN(rc); } @@ -213,14 +213,12 @@ static int __seq_server_alloc_meta(struct lu_server_seq *seq, CDEBUG(D_INFO, "%s: Input seq range: " DRANGE"\n", seq->lss_name, PRANGE(in)); - if (range_is_exhausted(space)) { + if (in->lsr_end <= space->lsr_start) { /* - * Server cannot send empty range to client, this is why - * we check here that range from client is "newer" than - * exhausted super. + * Client is replaying a fairly old range, server + * don't need to do any allocation. */ - LASSERT(in->lsr_end > space->lsr_start); - + } else if (range_is_exhausted(space)) { /* * Start is set to end of last allocated, because it * *is* already allocated so we take that into account @@ -258,8 +256,7 @@ static int __seq_server_alloc_meta(struct lu_server_seq *seq, * Update super start by end from client's range. Super * end should not be changed if range was not exhausted. */ - if (in->lsr_end > space->lsr_start) - space->lsr_start = in->lsr_end; + space->lsr_start = in->lsr_end; } /* sending replay_super to update fld as only super sequence @@ -334,9 +331,9 @@ int seq_server_alloc_meta(struct lu_server_seq *seq, int rc; ENTRY; - down(&seq->lss_sem); + cfs_down(&seq->lss_sem); rc = __seq_server_alloc_meta(seq, in, out, env); - up(&seq->lss_sem); + cfs_up(&seq->lss_sem); RETURN(rc); } @@ -406,7 +403,12 @@ static int seq_req_handle(struct ptlrpc_request *req, if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) { in = tmp; - LASSERT(!range_is_zero(in) && range_is_sane(in)); + + if (range_is_zero(in) || !range_is_sane(in)) { + CERROR("Replayed seq range is invalid: " + DRANGE"\n", PRANGE(in)); + RETURN(err_serious(-EINVAL)); + } } /* seq client passed mdt id, we need to pass that using out * range parameter */ @@ -538,7 +540,7 @@ int seq_server_init(struct lu_server_seq *seq, seq->lss_type = type; seq->lss_site = ms; range_init(&seq->lss_space); - sema_init(&seq->lss_sem, 1); + cfs_sema_init(&seq->lss_sem, 1); seq->lss_width = is_srv ? LUSTRE_SEQ_META_WIDTH : LUSTRE_SEQ_SUPER_WIDTH;