LASSERT(dev != NULL);
LASSERT(uuid != NULL);
- seq->lss_dev = dev;
seq->lss_cli = NULL;
seq->lss_type = type;
sema_init(&seq->lss_sem, 1);
seq->lss_space = LUSTRE_SEQ_SPACE_RANGE;
seq->lss_super = LUSTRE_SEQ_ZERO_RANGE;
- lu_device_get(&seq->lss_dev->dd_lu_dev);
-
- rc = seq_store_init(seq, ctx);
+ rc = seq_store_init(seq, ctx, dev);
if (rc)
GOTO(out, rc);
#ifndef _FID_INTERNAL_H
#define _FID_INTERNAL_H
-#define SEQ_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 1000)
+#include <lustre/lustre_idl.h>
+#include <dt_object.h>
-#ifdef LPROCFS
-extern struct lprocfs_vars seq_server_proc_list[];
-extern struct lprocfs_vars seq_client_proc_list[];
-#endif
+#include <libcfs/list.h>
+#include <libcfs/kp30.h>
+
+#include <linux/types.h>
+
+#define SEQ_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 1000)
#ifdef __KERNEL__
struct seq_store_record {
extern struct lu_context_key seq_thread_key;
int seq_store_init(struct lu_server_seq *seq,
- const struct lu_context *ctx);
+ const struct lu_context *ctx,
+ struct dt_device *dt);
void seq_store_fini(struct lu_server_seq *seq,
const struct lu_context *ctx);
int seq_store_read(struct lu_server_seq *seq,
const struct lu_context *ctx);
+
+#ifdef LPROCFS
+extern struct lprocfs_vars seq_server_proc_list[];
+extern struct lprocfs_vars seq_client_proc_list[];
+#endif
+
#endif
#endif
const struct lu_context *ctx)
{
struct dt_object *dt_obj = seq->lss_obj;
- struct dt_device *dt_dev = seq->lss_dev;
struct seq_thread_info *info;
+ struct dt_device *dt_dev;
struct thandle *th;
loff_t pos = 0;
int rc;
ENTRY;
+ dt_dev = lu2dt_dev(seq->lss_obj->do_lu.lo_dev);
info = lu_context_key_get(ctx, &seq_thread_key);
LASSERT(info != NULL);
}
int seq_store_init(struct lu_server_seq *seq,
- const struct lu_context *ctx)
+ const struct lu_context *ctx,
+ struct dt_device *dt)
{
- struct dt_device *dt = seq->lss_dev;
struct dt_object *dt_obj;
struct lu_fid fid;
int rc;
const struct lu_context *ctx)
{
ENTRY;
+
if (seq->lss_obj != NULL) {
- lu_object_put(ctx, &seq->lss_obj->do_lu);
+ if (!IS_ERR(seq->lss_obj))
+ lu_object_put(ctx, &seq->lss_obj->do_lu);
seq->lss_obj = NULL;
}
+
EXIT;
}
#endif
};
ENTRY;
- fld->fld_dt = dt;
- lu_device_get(&dt->dd_lu_dev);
-
snprintf(fld->fld_name, sizeof(fld->fld_name),
"%s-srv-%s", LUSTRE_FLD_NAME, uuid);
- rc = fld_index_init(fld, ctx);
+ rc = fld_index_init(fld, ctx, dt);
if (rc)
GOTO(out, rc);
fld->fld_service = NULL;
}
- if (fld->fld_dt != NULL) {
- lu_device_put(&fld->fld_dt->dd_lu_dev);
- fld_index_fini(fld, ctx);
- fld->fld_dt = NULL;
- }
+ fld_index_fini(fld, ctx);
+
EXIT;
}
EXPORT_SYMBOL(fld_server_fini);
const struct lu_context *ctx,
seqno_t seq, mdsno_t mds)
{
- struct dt_device *dt = fld->fld_dt;
struct dt_object *dt_obj = fld->fld_obj;
+ struct dt_device *dt_dev;
struct txn_param txn;
struct thandle *th;
int rc;
ENTRY;
+ dt_dev = lu2dt_dev(fld->fld_obj->do_lu.lo_dev);
+
/* stub here, will fix it later */
txn.tp_credits = FLD_TXN_INDEX_INSERT_CREDITS;
- th = dt->dd_ops->dt_trans_start(ctx, dt, &txn);
+ th = dt_dev->dd_ops->dt_trans_start(ctx, dt_dev, &txn);
if (!IS_ERR(th)) {
rc = dt_obj->do_index_ops->dio_insert(ctx, dt_obj,
fld_rec(ctx, mds),
fld_key(ctx, seq), th);
- dt->dd_ops->dt_trans_stop(ctx, th);
+ dt_dev->dd_ops->dt_trans_stop(ctx, th);
} else
rc = PTR_ERR(th);
RETURN(rc);
const struct lu_context *ctx,
seqno_t seq)
{
- struct dt_device *dt = fld->fld_dt;
struct dt_object *dt_obj = fld->fld_obj;
+ struct dt_device *dt_dev;
struct txn_param txn;
struct thandle *th;
int rc;
ENTRY;
+ dt_dev = lu2dt_dev(fld->fld_obj->do_lu.lo_dev);
txn.tp_credits = FLD_TXN_INDEX_DELETE_CREDITS;
- th = dt->dd_ops->dt_trans_start(ctx, dt, &txn);
+ th = dt_dev->dd_ops->dt_trans_start(ctx, dt_dev, &txn);
if (!IS_ERR(th)) {
rc = dt_obj->do_index_ops->dio_delete(ctx, dt_obj,
fld_key(ctx, seq), th);
- dt->dd_ops->dt_trans_stop(ctx, th);
+ dt_dev->dd_ops->dt_trans_stop(ctx, th);
} else
rc = PTR_ERR(th);
RETURN(rc);
}
int fld_index_init(struct lu_server_fld *fld,
- const struct lu_context *ctx)
+ const struct lu_context *ctx,
+ struct dt_device *dt)
{
- struct dt_device *dt = fld->fld_dt;
struct dt_object *dt_obj;
+ struct lu_fid fid;
int rc;
ENTRY;
*/
LASSERT(fld->fld_service == NULL);
- dt_obj = dt_store_open(ctx, dt, fld_index_name, &fld->fld_fid);
+ dt_obj = dt_store_open(ctx, dt, fld_index_name, &fid);
if (!IS_ERR(dt_obj)) {
fld->fld_obj = dt_obj;
rc = dt_obj->do_ops->do_index_try(ctx, dt_obj,
{
ENTRY;
if (fld->fld_obj != NULL) {
- lu_object_put(ctx, &fld->fld_obj->do_lu);
+ if (!IS_ERR(fld->fld_obj))
+ lu_object_put(ctx, &fld->fld_obj->do_lu);
fld->fld_obj = NULL;
}
if (fld_key_registered > 0) {
#ifndef _FLD_INTERNAL_H
#define _FLD_INTERNAL_H
+#include <lustre/lustre_idl.h>
+#include <dt_object.h>
+
+#include <libcfs/list.h>
+#include <libcfs/kp30.h>
+
#include <linux/types.h>
enum fld_op {
#define FLD_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 1000)
int fld_index_init(struct lu_server_fld *fld,
- const struct lu_context *ctx);
+ const struct lu_context *ctx,
+ struct dt_device *dt);
void fld_index_fini(struct lu_server_fld *fld,
const struct lu_context *ctx);
int fld_index_lookup(struct lu_server_fld *fld,
const struct lu_context *ctx,
seqno_t seq, mdsno_t *mds);
-#endif
#ifdef LPROCFS
extern struct lprocfs_vars fld_server_proc_list[];
#endif
#endif
+
+#endif
#ifdef __KERNEL__
if (fld->fld_cache != NULL) {
- fld_cache_fini(fld->fld_cache);
+ if (!IS_ERR(fld->fld_cache))
+ fld_cache_fini(fld->fld_cache);
fld->fld_cache = NULL;
}
#endif
it->it_flags = flags;
}
-
struct dentry {
int d_count;
};
#ifndef __LINUX_FLD_H
#define __LINUX_FLD_H
+#include <lustre/lustre_idl.h>
+#include <dt_object.h>
+
+#include <libcfs/list.h>
+#include <libcfs/kp30.h>
+
struct lu_client_fld;
struct lu_server_fld;
/* pointer to started server service */
struct ptlrpc_service *fld_service;
- /* device for access object index methods */
- struct dt_device *fld_dt;
-
/* /fld file object device */
struct dt_object *fld_obj;
- /* /fld file fid */
- struct lu_fid fld_fid;
-
/* fld service name in form "fld-MDTXXX" */
char fld_name[80];
};
#include <lustre/lustre_idl.h>
+#ifndef __KERNEL__
+/* XXX: dirty hack, needs to be fixed more clever way. */
+struct qstr {
+ const char *name;
+ size_t len;
+ unsigned hashval;
+};
+#endif
+
#define LMV_MAX_TGT_COUNT 128
#define lmv_init_lock(lmv) down(&lmv->init_sem);