Whamcloud - gitweb
- landing b_fid.
[fs/lustre-release.git] / lustre / include / linux / lustre_net.h
index f3569c0..3ccee10 100644 (file)
@@ -39,6 +39,7 @@
 #include <linux/lustre_ha.h>
 #include <linux/lustre_import.h>
 #include <linux/lprocfs_status.h>
+#include <linux/lustre_compat25.h>
 
 /* MD flags we _always_ use */
 #define PTLRPC_MD_OPTIONS  (PTL_MD_EVENT_START_DISABLE | \
@@ -708,15 +709,94 @@ void *mdc_setattr_pack(struct lustre_msg *msg, int offset,
                        struct mdc_op_data *data, struct iattr *iattr,
                        void *ea, int ealen, void *ea2, int ea2len);
 void *mdc_create_pack(struct lustre_msg *msg, int offset,
-                      struct mdc_op_data *op_data, __u32 mode, __u64 rdev,
-                      const void *data, int datalen);
+                      struct mdc_op_data *op_data, __u32 mode,
+                      __u64 rdev, const void *data, int datalen);
 void *mdc_unlink_pack(struct lustre_msg *msg, int offset,
                       struct mdc_op_data *data);
 void *mdc_link_pack(struct lustre_msg *msg, int offset,
                     struct mdc_op_data *data);
 void *mdc_rename_pack(struct lustre_msg *msg, int offset,
                       struct mdc_op_data *data,
-                      const char *old, int oldlen, const char *new, int newlen);
+                      const char *old, int oldlen,
+                      const char *new, int newlen);
+
+/* lustre id helper functions and macros. */
+static inline
+void mdc_pack_id(struct lustre_id *id, obd_id ino, 
+                 __u32 gen, int type, __u64 mds, 
+                 __u64 fid)
+{
+        LASSERT(id != NULL);
+
+        id->li_fid.lf_id = fid;
+        id->li_fid.lf_group = mds;
+        
+        id->li_stc.u.e3s.l3s_ino = ino;
+        id->li_stc.u.e3s.l3s_gen = gen;
+        id->li_stc.u.e3s.l3s_type = type;
+}
+
+#define id_ino(id)                              \
+        (id)->li_stc.u.e3s.l3s_ino
+
+#define id_gen(id)                              \
+        (id)->li_stc.u.e3s.l3s_gen
+
+#define id_type(id)                             \
+        (id)->li_stc.u.e3s.l3s_type
+
+#define id_fid(id)                              \
+        (id)->li_fid.lf_id
+
+#define id_group(id)                            \
+        (id)->li_fid.lf_group
+
+#define id_assign_fid(id1, id2)                 \
+        ((id1)->li_fid = (id2)->li_fid)
+
+#define id_assign_stc(id1, id2)                 \
+        ((id1)->li_stc = (id2)->li_stc)
+
+#define id_equal(id1, id2)                      \
+        (id_ino((id1)) == id_ino((id2)) &&      \
+         id_gen((id1)) == id_gen((id2)) &&      \
+         id_fid((id1)) == id_fid((id2)) &&      \
+         id_group((id1)) == id_group(id2))
+
+#define id_equal_fid(id1, id2)                  \
+        (id_fid((id1)) == id_fid((id2)) &&      \
+         id_group((id1)) == id_group((id2)))
+
+#define id_equal_stc(id1, id2)                  \
+        (id_ino((id1)) == id_ino((id2)) &&      \
+         id_gen((id1)) == id_gen((id2)))
+
+#ifdef __KERNEL__
+static inline void
+mdc_inode2id(struct lustre_id *id, struct inode *inode)
+{
+        mdc_pack_id(id, inode->i_ino, inode->i_generation,
+                    (inode->i_mode & S_IFMT), 0, 0);
+}
+
+static inline void 
+mdc_prepare_mdc_data(struct mdc_op_data *data, struct inode *i1,
+                     struct inode *i2, const char *name, int namelen,
+                     int mode)
+{
+        LASSERT(i1);
+
+        mdc_inode2id(&data->id1, i1);
+        if (i2)
+                mdc_inode2id(&data->id2, i2);
+
+       data->valid = 0;
+        data->name = name;
+        data->namelen = namelen;
+        data->create_mode = mode;
+        data->mod_time = LTIME_S(CURRENT_TIME);
+}
+#endif
 
 /* ldlm/ldlm_lib.c */
 int client_obd_setup(struct obd_device *obddev, obd_count len, void *buf);