static int seq_server_handle(struct lu_site *site, const struct lu_env *env, __u32 opc, struct lu_seq_range *out) { int rc; struct seq_server_site *ss_site; ENTRY; ss_site = lu_site2seq(site); switch (opc) { case SEQ_ALLOC_META: if (!ss_site->ss_server_seq) { CERROR("Sequence server is not " "initialized\n"); RETURN(-EINVAL); } rc = seq_server_alloc_meta(ss_site->ss_server_seq, out, env); break; case SEQ_ALLOC_SUPER: if (!ss_site->ss_control_seq) { CERROR("Sequence controller is not " "initialized\n"); RETURN(-EINVAL); } rc = seq_server_alloc_super(ss_site->ss_control_seq, out, env); break; default: rc = -EINVAL; break; } RETURN(rc); }
/* Request sequence-controller node to allocate new meta-sequence. */ static int seq_client_alloc_meta(const struct lu_env *env, struct lu_client_seq *seq) { int rc; ENTRY; if (seq->lcs_srv) { #ifdef HAVE_SEQ_SERVER LASSERT(env != NULL); rc = seq_server_alloc_meta(seq->lcs_srv, &seq->lcs_space, env); #else rc = 0; #endif } else { do { /* If meta server return -EINPROGRESS or EAGAIN, * it means meta server might not be ready to * allocate super sequence from sequence controller * (MDT0)yet */ rc = seq_client_rpc(seq, &seq->lcs_space, SEQ_ALLOC_META, "meta"); } while (rc == -EINPROGRESS || rc == -EAGAIN); } RETURN(rc); }
/* Request sequence-controller node to allocate new meta-sequence. */ static int seq_client_alloc_meta(const struct lu_env *env, struct lu_client_seq *seq) { int rc; ENTRY; #ifdef __KERNEL__ if (seq->lcs_srv) { LASSERT(env != NULL); rc = seq_server_alloc_meta(seq->lcs_srv, &seq->lcs_space, env); } else { #endif rc = seq_client_rpc(seq, &seq->lcs_space, SEQ_ALLOC_META, "meta"); #ifdef __KERNEL__ } #endif RETURN(rc); }
/* Request sequence-controller node to allocate new meta-sequence. */ static int seq_client_alloc_meta(const struct lu_env *env, struct lu_client_seq *seq) { int rc; ENTRY; if (seq->lcs_srv) { #ifdef HAVE_SEQ_SERVER LASSERT(env != NULL); rc = seq_server_alloc_meta(seq->lcs_srv, &seq->lcs_space, env); #else rc = 0; #endif } else { do { /* If meta server return -EINPROGRESS or EAGAIN, * it means meta server might not be ready to * allocate super sequence from sequence controller * (MDT0)yet */ rc = seq_client_rpc(seq, &seq->lcs_space, SEQ_ALLOC_META, "meta"); if (rc == -EINPROGRESS || rc == -EAGAIN) { wait_queue_head_t waitq; struct l_wait_info lwi; /* MDT0 is not ready, let's wait for 2 * seconds and retry. */ init_waitqueue_head(&waitq); lwi = LWI_TIMEOUT(cfs_time_seconds(2), NULL, NULL); l_wait_event(waitq, 0, &lwi); } } while (rc == -EINPROGRESS || rc == -EAGAIN); } RETURN(rc); }