diff options
Diffstat (limited to 'drivers/staging/lustre/lustre/fid/fid_request.c')
-rw-r--r-- | drivers/staging/lustre/lustre/fid/fid_request.c | 132 |
1 files changed, 32 insertions, 100 deletions
diff --git a/drivers/staging/lustre/lustre/fid/fid_request.c b/drivers/staging/lustre/lustre/fid/fid_request.c index a16d577c6cb1..7c45e7479087 100644 --- a/drivers/staging/lustre/lustre/fid/fid_request.c +++ b/drivers/staging/lustre/lustre/fid/fid_request.c @@ -150,19 +150,15 @@ int seq_client_alloc_super(struct lu_client_seq *seq, mutex_lock(&seq->lcs_mutex); - if (seq->lcs_srv) { - rc = 0; - } else { - /* Check whether the connection to seq controller has been - * setup (lcs_exp != NULL) */ - if (seq->lcs_exp == NULL) { - mutex_unlock(&seq->lcs_mutex); - return -EINPROGRESS; - } - - rc = seq_client_rpc(seq, &seq->lcs_space, - SEQ_ALLOC_SUPER, "super"); + /* Check whether the connection to seq controller has been + * setup (lcs_exp != NULL) */ + if (!seq->lcs_exp) { + mutex_unlock(&seq->lcs_mutex); + return -EINPROGRESS; } + + rc = seq_client_rpc(seq, &seq->lcs_space, + SEQ_ALLOC_SUPER, "super"); mutex_unlock(&seq->lcs_mutex); return rc; } @@ -173,18 +169,14 @@ static int seq_client_alloc_meta(const struct lu_env *env, { int rc; - if (seq->lcs_srv) { - rc = 0; - } 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); - } + 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; } @@ -248,57 +240,6 @@ static void seq_fid_alloc_fini(struct lu_client_seq *seq) wake_up(&seq->lcs_waitq); } -/** - * Allocate the whole seq to the caller. - **/ -int seq_client_get_seq(const struct lu_env *env, - struct lu_client_seq *seq, u64 *seqnr) -{ - wait_queue_t link; - int rc; - - LASSERT(seqnr != NULL); - mutex_lock(&seq->lcs_mutex); - init_waitqueue_entry(&link, current); - - while (1) { - rc = seq_fid_alloc_prep(seq, &link); - if (rc == 0) - break; - } - - rc = seq_client_alloc_seq(env, seq, seqnr); - if (rc) { - CERROR("%s: Can't allocate new sequence, rc %d\n", - seq->lcs_name, rc); - seq_fid_alloc_fini(seq); - mutex_unlock(&seq->lcs_mutex); - return rc; - } - - CDEBUG(D_INFO, "%s: allocate sequence [0x%16.16Lx]\n", - seq->lcs_name, *seqnr); - - /* Since the caller require the whole seq, - * so marked this seq to be used */ - if (seq->lcs_type == LUSTRE_SEQ_METADATA) - seq->lcs_fid.f_oid = LUSTRE_METADATA_SEQ_MAX_WIDTH; - else - seq->lcs_fid.f_oid = LUSTRE_DATA_SEQ_MAX_WIDTH; - - seq->lcs_fid.f_seq = *seqnr; - seq->lcs_fid.f_ver = 0; - /* - * Inform caller that sequence switch is performed to allow it - * to setup FLD for it. - */ - seq_fid_alloc_fini(seq); - mutex_unlock(&seq->lcs_mutex); - - return rc; -} -EXPORT_SYMBOL(seq_client_get_seq); - /* Allocate new fid on passed client @seq and save it to @fid. */ int seq_client_alloc_fid(const struct lu_env *env, struct lu_client_seq *seq, struct lu_fid *fid) @@ -438,18 +379,26 @@ out_cleanup: return rc; } -int seq_client_init(struct lu_client_seq *seq, - struct obd_export *exp, - enum lu_cli_type type, - const char *prefix, - struct lu_server_seq *srv) +static void seq_client_fini(struct lu_client_seq *seq) +{ + seq_client_debugfs_fini(seq); + + if (seq->lcs_exp) { + class_export_put(seq->lcs_exp); + seq->lcs_exp = NULL; + } +} + +static int seq_client_init(struct lu_client_seq *seq, + struct obd_export *exp, + enum lu_cli_type type, + const char *prefix) { int rc; LASSERT(seq != NULL); LASSERT(prefix != NULL); - seq->lcs_srv = srv; seq->lcs_type = type; mutex_init(&seq->lcs_mutex); @@ -462,10 +411,7 @@ int seq_client_init(struct lu_client_seq *seq, /* Make sure that things are clear before work is started. */ seq_client_flush(seq); - if (exp != NULL) - seq->lcs_exp = class_export_get(exp); - else if (type == LUSTRE_SEQ_METADATA) - LASSERT(seq->lcs_srv != NULL); + seq->lcs_exp = class_export_get(exp); snprintf(seq->lcs_name, sizeof(seq->lcs_name), "cli-%s", prefix); @@ -475,20 +421,6 @@ int seq_client_init(struct lu_client_seq *seq, seq_client_fini(seq); return rc; } -EXPORT_SYMBOL(seq_client_init); - -void seq_client_fini(struct lu_client_seq *seq) -{ - seq_client_debugfs_fini(seq); - - if (seq->lcs_exp != NULL) { - class_export_put(seq->lcs_exp); - seq->lcs_exp = NULL; - } - - seq->lcs_srv = NULL; -} -EXPORT_SYMBOL(seq_client_fini); int client_fid_init(struct obd_device *obd, struct obd_export *exp, enum lu_cli_type type) @@ -510,7 +442,7 @@ int client_fid_init(struct obd_device *obd, snprintf(prefix, MAX_OBD_NAME + 5, "cli-%s", obd->obd_name); /* Init client side sequence-manager */ - rc = seq_client_init(cli->cl_seq, exp, type, prefix, NULL); + rc = seq_client_init(cli->cl_seq, exp, type, prefix); kfree(prefix); if (rc) goto out_free_seq; |