- added seq-mgr client proc basics.
}
#ifdef LPROCFS
-static cfs_proc_dir_entry_t *seq_type_proc_dir = NULL;
-
static int
seq_server_proc_init(struct lu_server_seq *seq)
{
int rc;
ENTRY;
- seq_type_proc_dir = lprocfs_register(LUSTRE_SEQ0_NAME,
+ seq->seq_proc_dir = lprocfs_register(seq->seq_name,
proc_lustre_root,
NULL, NULL);
- if (IS_ERR(seq_type_proc_dir)) {
+ if (IS_ERR(seq->seq_proc_dir)) {
CERROR("LProcFS failed in seq-init\n");
- rc = PTR_ERR(seq_type_proc_dir);
+ rc = PTR_ERR(seq->seq_proc_dir);
GOTO(err, rc);
}
seq->seq_proc_entry = lprocfs_register("services",
- seq_type_proc_dir,
+ seq->seq_proc_dir,
NULL, NULL);
if (IS_ERR(seq->seq_proc_entry)) {
CERROR("LProcFS failed in seq-init\n");
GOTO(err_type, rc);
}
- rc = lprocfs_add_vars(seq_type_proc_dir,
+ rc = lprocfs_add_vars(seq->seq_proc_dir,
seq_server_proc_list, seq);
if (rc) {
CERROR("can't init sequence manager "
RETURN(0);
err_type:
- lprocfs_remove(seq_type_proc_dir);
+ lprocfs_remove(seq->seq_proc_dir);
err:
- seq_type_proc_dir = NULL;
+ seq->seq_proc_dir = NULL;
seq->seq_proc_entry = NULL;
return rc;
}
-void seq_server_proc_fini(struct lu_server_seq *seq)
+static void
+seq_server_proc_fini(struct lu_server_seq *seq)
{
ENTRY;
if (seq->seq_proc_entry) {
seq->seq_proc_entry = NULL;
}
- if (seq_type_proc_dir) {
- lprocfs_remove(seq_type_proc_dir);
- seq_type_proc_dir = NULL;
+ if (seq->seq_proc_dir) {
+ lprocfs_remove(seq->seq_proc_dir);
+ seq->seq_proc_dir = NULL;
}
EXIT;
}
int
seq_server_init(struct lu_server_seq *seq,
struct dt_device *dev,
+ const char *uuid,
const struct lu_context *ctx)
{
int rc;
ENTRY;
LASSERT(dev != NULL);
+ LASSERT(uuid != NULL);
seq->seq_dev = dev;
seq->seq_cli = NULL;
sema_init(&seq->seq_sem, 1);
+ snprintf(seq->seq_name, sizeof(seq->seq_name),
+ "%s-%s", LUSTRE_SEQ_NAME, uuid);
+
seq->seq_space = LUSTRE_SEQ_SPACE_RANGE;
seq->seq_super = LUSTRE_SEQ_ZERO_RANGE;
seq->seq_service = ptlrpc_init_svc_conf(&seq_conf,
seq_req_handle,
- LUSTRE_SEQ0_NAME,
+ LUSTRE_SEQ_NAME,
seq->seq_proc_entry,
NULL);
if (seq->seq_service != NULL)
rc = ptlrpc_start_threads(NULL, seq->seq_service,
- LUSTRE_SEQ0_NAME);
+ LUSTRE_SEQ_NAME);
else
rc = -ENOMEM;
}
EXPORT_SYMBOL(seq_client_alloc_fid);
+#ifdef LPROCFS
+static int
+seq_client_proc_init(struct lu_client_seq *seq)
+{
+ int rc;
+ ENTRY;
+
+ seq->seq_proc_dir = lprocfs_register(seq->seq_name,
+ proc_lustre_root,
+ NULL, NULL);
+
+ if (IS_ERR(seq->seq_proc_dir)) {
+ CERROR("LProcFS failed in seq-init\n");
+ rc = PTR_ERR(seq->seq_proc_dir);
+ GOTO(err, rc);
+ }
+
+ rc = lprocfs_add_vars(seq->seq_proc_dir,
+ seq_client_proc_list, seq);
+ if (rc) {
+ CERROR("can't init sequence manager "
+ "proc, rc %d\n", rc);
+ }
+
+ RETURN(0);
+
+err:
+ seq->seq_proc_dir = NULL;
+ return rc;
+}
+
+static void
+seq_client_proc_fini(struct lu_client_seq *seq)
+{
+ ENTRY;
+ if (seq->seq_proc_dir) {
+ lprocfs_remove(seq->seq_proc_dir);
+ seq->seq_proc_dir = NULL;
+ }
+ EXIT;
+}
+#endif
+
int
-seq_client_init(struct lu_client_seq *seq,
+seq_client_init(struct lu_client_seq *seq,
+ const char *uuid,
struct obd_export *exp)
{
+ int rc;
ENTRY;
LASSERT(exp != NULL);
sema_init(&seq->seq_sem, 1);
seq->seq_exp = class_export_get(exp);
- CDEBUG(D_INFO|D_WARNING, "Client Sequence "
- "Manager initialized\n");
+ snprintf(seq->seq_name, sizeof(seq->seq_name),
+ "%s-%s", LUSTRE_SEQ_NAME, uuid);
+
+#ifdef LPROCFS
+ rc = seq_client_proc_init(seq);
+ if (rc) {
+ class_export_put(seq->seq_exp);
+ RETURN(rc);
+ }
+#endif
+
+ CDEBUG(D_INFO|D_WARNING, "Client Sequence Manager\n");
RETURN(0);
}
EXPORT_SYMBOL(seq_client_init);
void seq_client_fini(struct lu_client_seq *seq)
{
ENTRY;
+
+#ifdef LPROCFS
+ seq_client_proc_fini(seq);
+#endif
+
if (seq->seq_exp != NULL) {
class_export_put(seq->seq_exp);
seq->seq_exp = NULL;
}
- CDEBUG(D_INFO|D_WARNING, "Client Sequence Manager finalized\n");
+
+ CDEBUG(D_INFO|D_WARNING, "Client Sequence Manager\n");
+
EXIT;
}
EXPORT_SYMBOL(seq_client_fini);
#include "fid_internal.h"
#ifdef LPROCFS
+/* server side procfs stuff */
static int
-seq_proc_write_range(struct file *file, const char *buffer,
- unsigned long count, void *data,
- struct lu_range *range)
+seq_proc_write_common(struct file *file, const char *buffer,
+ unsigned long count, void *data,
+ struct lu_range *range)
{
struct lu_range tmp;
int rc;
}
static int
-seq_proc_read_range(char *page, char **start, off_t off,
- int count, int *eof, void *data,
- struct lu_range *range)
+seq_proc_read_common(char *page, char **start, off_t off,
+ int count, int *eof, void *data,
+ struct lu_range *range)
{
int rc;
ENTRY;
LASSERT(seq != NULL);
down(&seq->seq_sem);
- rc = seq_proc_write_range(file, buffer, count,
- data, &seq->seq_space);
+ rc = seq_proc_write_common(file, buffer, count,
+ data, &seq->seq_space);
if (rc == 0) {
CDEBUG(D_WARNING, "SEQ-MGR(srv): sequences space has changed "
"to ["LPU64"-"LPU64"]\n", seq->seq_space.lr_start,
LASSERT(seq != NULL);
down(&seq->seq_sem);
- rc = seq_proc_read_range(page, start, off, count, eof,
- data, &seq->seq_space);
+ rc = seq_proc_read_common(page, start, off, count, eof,
+ data, &seq->seq_space);
up(&seq->seq_sem);
RETURN(rc);
LASSERT(seq != NULL);
down(&seq->seq_sem);
- rc = seq_proc_write_range(file, buffer, count,
- data, &seq->seq_super);
+ rc = seq_proc_write_common(file, buffer, count,
+ data, &seq->seq_super);
if (rc == 0) {
CDEBUG(D_WARNING, "SEQ-MGR(srv): super-sequence has changed to "
LASSERT(seq != NULL);
down(&seq->seq_sem);
- rc = seq_proc_read_range(page, start, off, count, eof,
- data, &seq->seq_super);
+ rc = seq_proc_read_common(page, start, off, count, eof,
+ data, &seq->seq_super);
up(&seq->seq_sem);
RETURN(rc);
}
static int
-seq_proc_write_meta(struct file *file, const char *buffer,
- unsigned long count, void *data)
+seq_proc_read_controller(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
{
- struct lu_client_seq *seq = (struct lu_client_seq *)data;
+ struct lu_server_seq *seq = (struct lu_server_seq *)data;
int rc;
ENTRY;
LASSERT(seq != NULL);
- down(&seq->seq_sem);
- rc = seq_proc_write_range(file, buffer, count,
- data, &seq->seq_range);
+ *eof = 1;
+ if (seq->seq_cli) {
+ struct obd_export *exp = seq->seq_cli->seq_exp;
- if (rc == 0) {
- CDEBUG(D_WARNING, "SEQ-MGR(cli): meta-sequence has changed to "
- "["LPU64"-"LPU64"]\n", seq->seq_range.lr_start,
- seq->seq_range.lr_end);
+ rc = snprintf(page, count, "%s\n",
+ exp->exp_client_uuid.uuid);
+ } else {
+ rc = snprintf(page, count, "<not assigned>\n");
}
- up(&seq->seq_sem);
-
- RETURN(count);
+ RETURN(rc);
}
+/* client side procfs stuff */
static int
-seq_proc_read_meta(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+seq_proc_write_range(struct file *file, const char *buffer,
+ unsigned long count, void *data)
{
struct lu_client_seq *seq = (struct lu_client_seq *)data;
int rc;
LASSERT(seq != NULL);
down(&seq->seq_sem);
- rc = seq_proc_read_range(page, start, off, count, eof,
- data, &seq->seq_range);
+ rc = seq_proc_write_common(file, buffer, count,
+ data, &seq->seq_range);
+
+ if (rc == 0) {
+ CDEBUG(D_WARNING, "SEQ-MGR(cli): meta-sequence has changed to "
+ "["LPU64"-"LPU64"]\n", seq->seq_range.lr_start,
+ seq->seq_range.lr_end);
+ }
+
up(&seq->seq_sem);
- RETURN(rc);
+ RETURN(count);
}
static int
-seq_proc_read_controller(char *page, char **start, off_t off,
- int count, int *eof, void *data)
+seq_proc_read_range(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
{
- struct lu_server_seq *seq = (struct lu_server_seq *)data;
+ struct lu_client_seq *seq = (struct lu_client_seq *)data;
int rc;
ENTRY;
LASSERT(seq != NULL);
- *eof = 1;
- if (seq->seq_cli) {
- struct obd_export *exp = seq->seq_cli->seq_exp;
-
- rc = snprintf(page, count, "%s\n",
- exp->exp_client_uuid.uuid);
- } else {
- rc = snprintf(page, count, "<not assigned>\n");
- }
+ down(&seq->seq_sem);
+ rc = seq_proc_read_common(page, start, off, count, eof,
+ data, &seq->seq_range);
+ up(&seq->seq_sem);
RETURN(rc);
}
{ NULL }};
struct lprocfs_vars seq_client_proc_list[] = {
- { "meta", seq_proc_read_meta, seq_proc_write_meta, NULL },
+ { "range", seq_proc_read_range, seq_proc_write_range, NULL },
{ NULL }};
#endif
if (rc == 0) {
fld->fld_service =
ptlrpc_init_svc_conf(&fld_conf, fld_req_handle,
- LUSTRE_FLD0_NAME,
+ LUSTRE_FLD_NAME,
fld->fld_proc_entry, NULL);
if (fld->fld_service != NULL)
rc = ptlrpc_start_threads(NULL, fld->fld_service,
- LUSTRE_FLD0_NAME);
+ LUSTRE_FLD_NAME);
else
rc = -ENOMEM;
}
struct lu_range seq_range;
/* seq related proc */
- cfs_proc_dir_entry_t *seq_proc_entry;
+ cfs_proc_dir_entry_t *seq_proc_dir;
/* this holds last allocated fid in last obtained seq */
struct lu_fid seq_fid;
+
+ /* service uuid, passed from MDT + seq name to form unique seq name to
+ * use it with procfs. */
+ char seq_name[80];
};
#ifdef __KERNEL__
/* seq related proc */
cfs_proc_dir_entry_t *seq_proc_entry;
+ cfs_proc_dir_entry_t *seq_proc_dir;
+
/* server side seq service */
struct ptlrpc_service *seq_service;
/* semaphore for protecting allocation */
struct semaphore seq_sem;
+
+ /* service uuid, passed from MDT + seq name to form unique seq name to
+ * use it with procfs. */
+ char seq_name[80];
};
#endif
#ifdef __KERNEL__
int seq_server_init(struct lu_server_seq *seq,
struct dt_device *dev,
+ const char *uuid,
const struct lu_context *ctx);
void seq_server_fini(struct lu_server_seq *seq,
#endif
int seq_client_init(struct lu_client_seq *seq,
+ const char *uuid,
struct obd_export *exp);
void seq_client_fini(struct lu_client_seq *seq);
int ph_opc;
};
+#define LUSTRE_FLD_NAME "fld"
+#define LUSTRE_SEQ_NAME "seq"
+
/* device types (not names--FIXME) */
/* FIXME all the references to these defines need to be updated */
-#define LUSTRE_MDS_NAME "mds"
-#define LUSTRE_MDT_NAME "mdt"
+#define LUSTRE_MDS_NAME "mds"
+#define LUSTRE_MDT_NAME "mdt"
/* new MDS layers. Prototype */
#define LUSTRE_MDT0_NAME "mdt0"
#define LUSTRE_CMM0_NAME "cmm0"
#define LUSTRE_MDD0_NAME "mdd0"
#define LUSTRE_OSD0_NAME "osd0"
-#define LUSTRE_FLD0_NAME "fld0"
-#define LUSTRE_SEQ0_NAME "seq0"
#define LUSTRE_MDC0_NAME "mdc0"
#define LUSTRE_MDC_NAME "mdc"
RETURN(-ENOMEM);
/* init client side sequence-manager */
- rc = seq_client_init(cli->cl_seq, exp);
+ rc = seq_client_init(cli->cl_seq,
+ exp->exp_obd->obd_name, exp);
if (rc)
GOTO(out_free_seq, rc);
}
static int mdt_seq_init(const struct lu_context *ctx,
+ const char *uuid,
struct mdt_device *m)
{
struct lu_site *ls;
OBD_ALLOC_PTR(ls->ls_server_seq);
if (ls->ls_server_seq != NULL) {
- rc = seq_server_init(ls->ls_server_seq,
- m->mdt_bottom, ctx);
+ rc = seq_server_init(ls->ls_server_seq,
+ m->mdt_bottom, uuid,
+ ctx);
} else
rc = -ENOMEM;
if (ls->ls_client_seq != NULL) {
rc = seq_client_init(ls->ls_client_seq,
+ mdc->obd_name,
ls->ls_controller);
} else
rc = -ENOMEM;
GOTO(err_fini_stack, rc);
lu_context_enter(&ctx);
- rc = mdt_seq_init(&ctx, m);
+ rc = mdt_seq_init(&ctx, obd->obd_name, m);
lu_context_exit(&ctx);
if (rc)
GOTO(err_fini_fld, rc);