Whamcloud - gitweb
sanitize transaction stuff in mdd
authornikita <nikita>
Wed, 17 May 2006 14:15:33 +0000 (14:15 +0000)
committernikita <nikita>
Wed, 17 May 2006 14:15:33 +0000 (14:15 +0000)
lustre/include/linux/dt_object.h
lustre/mdd/mdd_handler.c
lustre/osd/osd_handler.c
lustre/osd/osd_internal.h

index ab4c73f..d502242 100644 (file)
@@ -285,12 +285,6 @@ struct txn_param {
         unsigned int tp_credits;
 };
 
-#define TXN_PARAM_INIT(credits) {               \
-        .tp_credits = (credits)                 \
-}
-
-#define TXN_PARAM(...) ((struct txn_param)TXN_PARAM_INIT(__VA_ARGS__))
-
 struct thandle {
         struct dt_device *th_dev;
 };
index b69901a..bb2a1a2 100644 (file)
@@ -47,8 +47,7 @@
 
 
 static struct thandle* mdd_trans_start(struct lu_context *ctxt,
-                                       struct mdd_device *,
-                                       struct txn_param *);
+                                       struct mdd_device *);
 static void mdd_trans_stop(struct lu_context *ctxt,
                            struct mdd_device *mdd, struct thandle *handle);
 static struct dt_object* mdd_object_child(struct mdd_object *o);
@@ -224,21 +223,60 @@ mdd_add_unlink_log(struct mdd_device *mdd, struct mdd_object *obj,
         return 0;
 }
 
+enum mdd_txn_op {
+        MDD_TXN_OBJECT_DESTROY_OP,
+        MDD_TXN_OBJECT_CREATE_OP,
+        MDD_TXN_ATTR_SET_OP,
+        MDD_TXN_XATTR_SET_OP,
+        MDD_TXN_INDEX_INSERT_OP,
+        MDD_TXN_INDEX_DELETE_OP,
+        MDD_TXN_LINK_OP,
+        MDD_TXN_RENAME_OP,
+        MDD_TXN_MKDIR_OP
+};
+
+struct mdd_txn_op_descr {
+        enum mdd_txn_op mod_op;
+        unsigned int    mod_credits;
+};
+
+enum {
+        MDD_TXN_OBJECT_DESTROY_CREDITS = 10,
+        MDD_TXN_OBJECT_CREATE_CREDITS  = 10,
+        MDD_TXN_ATTR_SET_CREDITS       = 10,
+        MDD_TXN_XATTR_SET_CREDITS      = 10,
+        MDD_TXN_INDEX_INSERT_CREDITS   = 10,
+        MDD_TXN_INDEX_DELETE_CREDITS   = 10,
+        MDD_TXN_LINK_CREDITS           = 10,
+        MDD_TXN_RENAME_CREDITS         = 10,
+        MDD_TXN_MKDIR_CREDITS          = 10
+};
+
+#define DEFINE_MDD_TXN_OP_DESC(opname)          \
+static const struct mdd_txn_op_descr opname = { \
+        .mod_op      = opname ## _OP,           \
+        .mod_credits = opname ## _CREDITS,      \
+}
+
 /*
  * number of blocks to reserve for particular operations. Should be function
  * of ... something. Stub for now.
  */
-enum {
-        MDD_OBJECT_DESTROY_CREDITS = 10,
-        MDD_OBJECT_CREATE_CREDITS  = 10,
-        MDD_ATTR_SET_CREDITS       = 10,
-        MDD_XATTR_SET_CREDITS      = 10,
-        MDD_INDEX_INSERT_CREDITS   = 10,
-        MDD_INDEX_DELETE_CREDITS   = 10,
-        MDD_LINK_CREDITS           = 10,
-        MDD_RENAME_CREDITS         = 10,
-        MDD_MKDIR_CREDITS          = 10
-};
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_OBJECT_DESTROY);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_OBJECT_CREATE);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_ATTR_SET);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_XATTR_SET);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_INDEX_INSERT);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_INDEX_DELETE);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_LINK);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_RENAME);
+DEFINE_MDD_TXN_OP_DESC(MDD_TXN_MKDIR);
+
+static void mdd_txn_param_build(struct lu_context *ctx,
+                                const struct mdd_txn_op_descr *opd)
+{
+        mdd_ctx_info(ctx)->mti_param.tp_credits = opd->mod_credits;
+}
 
 static int
 mdd_object_destroy(struct lu_context *ctxt, struct md_object *obj)
@@ -249,14 +287,8 @@ mdd_object_destroy(struct lu_context *ctxt, struct md_object *obj)
         int rc ;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd,
-                                 /*
-                                  * TXN_PARAM should probably go into
-                                  * lu_context_key to reduce stack
-                                  * consumption. Currently this is just one
-                                  * int, though.
-                                  */
-                                 &TXN_PARAM(MDD_OBJECT_DESTROY_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_OBJECT_DESTROY);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -394,9 +426,10 @@ static void mdd_unlock2(struct lu_context *ctxt,
 }
 
 static struct thandle* mdd_trans_start(struct lu_context *ctxt,
-                                       struct mdd_device *mdd,
-                                       struct txn_param *p)
+                                       struct mdd_device *mdd)
 {
+        struct txn_param *p = &mdd_ctx_info(ctxt)->mti_param;
+
         return mdd_child_ops(mdd)->dt_trans_start(ctxt, mdd->mdd_child, p);
 }
 
@@ -428,8 +461,8 @@ static int mdd_object_create(struct lu_context *ctxt, struct md_object *obj,
         int rc;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd,
-                                 &TXN_PARAM(MDD_OBJECT_CREATE_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_OBJECT_CREATE);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -458,7 +491,8 @@ mdd_attr_set(struct lu_context *ctxt,
         int  rc;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_ATTR_SET_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_ATTR_SET);
+        handle = mdd_trans_start(ctxt, mdd);
         if (!handle)
                 RETURN(-ENOMEM);
 
@@ -490,7 +524,8 @@ mdd_xattr_set(struct lu_context *ctxt, struct md_object *obj, void *buf,
         int  rc;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_XATTR_SET_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_XATTR_SET);
+        handle = mdd_trans_start(ctxt, mdd);
         if (!handle)
                 RETURN(-ENOMEM);
 
@@ -551,8 +586,8 @@ mdd_index_delete(struct lu_context *ctxt, struct md_object *pobj,
         int rc;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd,
-                                 &TXN_PARAM(MDD_INDEX_DELETE_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_INDEX_DELETE);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -574,7 +609,8 @@ mdd_link(struct lu_context *ctxt, struct md_object *tgt_obj,
         int rc, nlink;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_LINK_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_LINK);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -624,7 +660,8 @@ mdd_rename(struct lu_context *ctxt, struct md_object *src_pobj,
         int rc;
         struct thandle *handle;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_RENAME_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_RENAME);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -665,7 +702,8 @@ static int mdd_mkdir(struct lu_context *ctxt, struct lu_attr* attr,
         int rc = 0;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd, &TXN_PARAM(MDD_MKDIR_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_MKDIR);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
@@ -694,8 +732,8 @@ static int mdd_mkname(struct lu_context *ctxt, struct md_object *pobj,
         int rc = 0;
         ENTRY;
 
-        handle = mdd_trans_start(ctxt, mdd,
-                                 &TXN_PARAM(MDD_INDEX_INSERT_CREDITS));
+        mdd_txn_param_build(ctxt, &MDD_TXN_INDEX_INSERT);
+        handle = mdd_trans_start(ctxt, mdd);
         if (IS_ERR(handle))
                 RETURN(PTR_ERR(handle));
 
index 936785e..eb5820b 100644 (file)
@@ -427,10 +427,6 @@ static int osd_mkdir(struct osd_thread_info *info, struct osd_object *obj,
          * XXX temporary solution.
          */
         struct dentry     *dentry;
-        char               name[32];
-        struct qstr        str = {
-                .name = name
-        };
 
         LASSERT(obj->oo_inode == NULL);
         LASSERT(S_ISDIR(attr->la_mode));
@@ -439,10 +435,11 @@ static int osd_mkdir(struct osd_thread_info *info, struct osd_object *obj,
         dir = osd->od_obj_area->d_inode;
         LASSERT(dir->i_op != NULL && dir->i_op->mkdir != NULL);
 
-        osd_fid_build_name(lu_object_fid(&obj->oo_dt.do_lu), name);
-        str.len = strlen(name);
+        osd_fid_build_name(lu_object_fid(&obj->oo_dt.do_lu), info->oti_name);
+        info->oti_str.name = info->oti_name;
+        info->oti_str.len  = strlen(info->oti_name);
 
-        dentry = d_alloc(osd->od_obj_area, &str);
+        dentry = d_alloc(osd->od_obj_area, &info->oti_str);
         if (dentry != NULL) {
                 result = dir->i_op->mkdir(dir, dentry,
                                           attr->la_mode & (S_IRWXUGO|S_ISVTX));
@@ -560,9 +557,10 @@ static struct dt_body_operations osd_body_ops = {
 static int osd_index_lookup(struct lu_context *ctxt, struct dt_object *dt,
                             struct dt_rec *rec, const struct dt_key *key)
 {
-        struct osd_object *obj = osd_dt_obj(dt);
-        struct osd_device *osd = osd_obj2dev(obj);
-        struct inode      *dir;
+        struct osd_object      *obj  = osd_dt_obj(dt);
+        struct osd_device      *osd  = osd_obj2dev(obj);
+        struct osd_thread_info *info = lu_context_key_get(ctxt, &osd_key);
+        struct inode           *dir;
 
         int result;
 
@@ -570,18 +568,17 @@ static int osd_index_lookup(struct lu_context *ctxt, struct dt_object *dt,
          * XXX temporary solution.
          */
         struct dentry     *dentry;
-        struct qstr        str = {
-                .name = (const char *)key,
-                .len  = strlen((const char *)key)
-        };
 
         LASSERT(osd_has_index(obj));
         LASSERT(osd->od_obj_area != NULL);
 
+        info->oti_str.name = (const char *)key;
+        info->oti_str.len  = strlen((const char *)key);
+
         dir = obj->oo_inode;
         LASSERT(dir->i_op != NULL && dir->i_op->lookup != NULL);
 
-        dentry = d_alloc(NULL, &str);
+        dentry = d_alloc(NULL, &info->oti_str);
         if (dentry != NULL) {
                 struct dentry *d;
 
index a84500e..e623d87 100644 (file)
@@ -76,6 +76,15 @@ struct dentry *osd_open(struct dentry *parent, const char *name, mode_t mode);
 struct osd_thread_info {
         struct lu_fid       oti_fid;
         struct osd_inode_id oti_id;
+        /*
+         * XXX temporary: Buffer for fid->name conversion.
+         */
+        char                oti_name[32];
+        /*
+         * XXX temporary: for ->i_op calls.
+         */
+        struct qstr         oti_str;
+
 };
 
 #endif /* __KERNEL__ */