* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2013, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <obd.h>
#include <obd_class.h>
#include <dt_object.h>
-#include <md_object.h>
#include <obd_support.h>
#include <lustre_req_layout.h>
#include <lustre_fid.h>
static void seq_server_proc_fini(struct lu_server_seq *seq);
/* Assigns client to sequence controller node. */
-int seq_server_set_cli(struct lu_server_seq *seq,
- struct lu_client_seq *cli,
- const struct lu_env *env)
+int seq_server_set_cli(const struct lu_env *env, struct lu_server_seq *seq,
+ struct lu_client_seq *cli)
{
int rc = 0;
ENTRY;
*/
mutex_lock(&seq->lss_mutex);
- if (cli == NULL) {
- CDEBUG(D_INFO, "%s: Detached sequence client %s\n",
- seq->lss_name, cli->lcs_name);
- seq->lss_cli = cli;
- GOTO(out_up, rc = 0);
- }
+ if (cli == NULL) {
+ CDEBUG(D_INFO, "%s: Detached sequence client\n", seq->lss_name);
+ seq->lss_cli = NULL;
+ GOTO(out_up, rc = 0);
+ }
if (seq->lss_cli != NULL) {
CDEBUG(D_HA, "%s: Sequence controller is already "
* flaged as sync write op.
*/
static int range_alloc_set(const struct lu_env *env,
- struct lu_seq_range *out,
- struct lu_server_seq *seq)
+ struct lu_seq_range *out,
+ struct lu_server_seq *seq)
{
struct lu_seq_range *space = &seq->lss_space;
struct lu_seq_range *loset = &seq->lss_lowater_set;
/* Saving new range to allocation space. */
*space = seq->lss_cli->lcs_space;
LASSERT(range_is_sane(space));
+ if (seq->lss_cli->lcs_srv == NULL) {
+ struct lu_server_fld *fld;
+
+ /* Insert it to the local FLDB */
+ fld = seq->lss_site->ss_server_fld;
+ mutex_lock(&fld->lsf_lock);
+ rc = fld_insert_entry(env, fld, space);
+ mutex_unlock(&fld->lsf_lock);
+ }
}
rc = range_alloc_set(env, out, seq);
RETURN(rc);
}
-EXPORT_SYMBOL(seq_server_alloc_meta);
static int seq_server_handle(struct lu_site *site,
const struct lu_env *env,
static int seq_server_proc_init(struct lu_server_seq *seq)
{
-#ifdef LPROCFS
-
- int rc;
- ENTRY;
+#ifdef CONFIG_PROC_FS
+ int rc;
+ ENTRY;
- seq->lss_proc_dir = lprocfs_register(seq->lss_name,
- seq_type_proc_dir,
- NULL, NULL);
- if (IS_ERR(seq->lss_proc_dir)) {
- rc = PTR_ERR(seq->lss_proc_dir);
- RETURN(rc);
- }
+ seq->lss_proc_dir = lprocfs_register(seq->lss_name,
+ seq_type_proc_dir,
+ NULL, NULL);
+ if (IS_ERR(seq->lss_proc_dir)) {
+ rc = PTR_ERR(seq->lss_proc_dir);
+ RETURN(rc);
+ }
- rc = lprocfs_add_vars(seq->lss_proc_dir,
- seq_server_proc_list, seq);
- if (rc) {
- CERROR("%s: Can't init sequence manager "
- "proc, rc %d\n", seq->lss_name, rc);
- GOTO(out_cleanup, rc);
- }
+ rc = lprocfs_add_vars(seq->lss_proc_dir, seq_server_proc_list, seq);
+ if (rc) {
+ CERROR("%s: Can't init sequence manager "
+ "proc, rc %d\n", seq->lss_name, rc);
+ GOTO(out_cleanup, rc);
+ }
if (seq->lss_type == LUSTRE_SEQ_CONTROLLER) {
rc = lprocfs_seq_create(seq->lss_proc_dir, "fldb", 0644,
}
}
- RETURN(0);
+ RETURN(0);
out_cleanup:
- seq_server_proc_fini(seq);
- return rc;
-#else /* LPROCFS */
+ seq_server_proc_fini(seq);
+ return rc;
+#else /* !CONFIG_PROC_FS */
return 0;
-#endif
+#endif /* CONFIG_PROC_FS */
}
static void seq_server_proc_fini(struct lu_server_seq *seq)
{
-#ifdef LPROCFS
+#ifdef CONFIG_PROC_FS
ENTRY;
if (seq->lss_proc_dir != NULL) {
if (!IS_ERR(seq->lss_proc_dir))
seq->lss_proc_dir = NULL;
}
EXIT;
-#endif /* LPROCFS */
+#endif /* CONFIG_PROC_FS */
}
-int seq_server_init(struct lu_server_seq *seq,
+int seq_server_init(const struct lu_env *env,
+ struct lu_server_seq *seq,
struct dt_device *dev,
const char *prefix,
enum lu_mgr_type type,
- struct seq_server_site *ss,
- const struct lu_env *env)
+ struct seq_server_site *ss)
{
int rc, is_srv = (type == LUSTRE_SEQ_SERVER);
ENTRY;