Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
[fs/lustre-release.git] / lustre / include / linux / lustre_mds.h
index c951637..683d78d 100644 (file)
 #define _LUSTRE_MDS_H
 
 #ifdef __KERNEL__
-#include <linux/fs.h>
+# include <linux/fs.h>
+# include <linux/dcache.h>
 #endif
+#include <linux/lustre_handles.h>
 #include <linux/kp30.h>
 #include <linux/lustre_idl.h>
+#include <linux/lustre_lib.h>
+#include <linux/lustre_dlm.h>
 
 struct ldlm_lock_desc;
 struct mds_obd;
@@ -58,6 +62,36 @@ static inline void mdc_init_rpc_lock(struct mdc_rpc_lock *lck)
         lck->rpcl_it = NULL;
 }
 
+#ifdef __KERNEL__
+/* Compat code for kernel patch v18 users, can be removed when everyone has
+ * upgraded --phik 02 June 2003 */
+#ifdef IT_FL_LOCKED
+static inline void mdc_get_rpc_lock(struct mdc_rpc_lock *lck, 
+                                    struct lookup_intent *it)
+{
+        down(&lck->rpcl_sem);
+        if (it) { 
+                lck->rpcl_it = it;
+                it->it_int_flags |= IT_FL_LOCKED;
+        }
+}
+
+static inline void mdc_put_rpc_lock(struct mdc_rpc_lock *lck, 
+                                    struct lookup_intent *it)
+{
+        if (it == NULL) {
+                LASSERT(it == lck->rpcl_it);
+                up(&lck->rpcl_sem);
+                return;
+        }
+        if (it != NULL && (it->it_int_flags & IT_FL_LOCKED)) {
+                it->it_int_flags &= ~IT_FL_LOCKED;
+                LASSERT(it == lck->rpcl_it);
+                lck->rpcl_it = NULL;
+                up(&lck->rpcl_sem);
+        }
+}
+#else
 static inline void mdc_get_rpc_lock(struct mdc_rpc_lock *lck, 
                                     struct lookup_intent *it)
 {
@@ -83,18 +117,24 @@ static inline void mdc_put_rpc_lock(struct mdc_rpc_lock *lck,
                 up(&lck->rpcl_sem);
         }
 }
-struct  mdc_unlink_data {
-        struct inode *unl_dir;
-        struct inode *unl_de;
-        int unl_mode;
-        const char *unl_name;
-        int unl_len;
+#endif
+#endif
+
+struct mdc_op_data {
+        __u64   ino1;
+        __u32   gen1;
+        __u32   typ1;
+        __u32   gid1;
+        __u64   ino2;
+        __u32   gen2;
+        __u32   typ2;
+        __u32   gid2;
+        const char *name;
+        int     namelen;
+        int     mode;
 };
 
 struct mds_update_record {
-        __u32 ur_fsuid;
-        __u32 ur_fsgid;
-        __u32 ur_cap;
         __u32 ur_opcode;
         struct ll_fid *ur_fid1;
         struct ll_fid *ur_fid2;
@@ -102,17 +142,24 @@ struct mds_update_record {
         char *ur_name;
         int ur_tgtlen;
         char *ur_tgt;
+        int ur_eadatalen;
+        void *ur_eadata;
         struct iattr ur_iattr;
+        struct obd_ucred ur_uc;
         __u64 ur_rdev;
         __u32 ur_mode;
         __u32 ur_uid;
         __u32 ur_gid;
         __u64 ur_time;
         __u32 ur_flags;
-        __u32 ur_suppgid1;
-        __u32 ur_suppgid2;
 };
 
+#define ur_fsuid    ur_uc.ouc_fsuid
+#define ur_fsgid    ur_uc.ouc_fsgid
+#define ur_cap      ur_uc.ouc_cap
+#define ur_suppgid1 ur_uc.ouc_suppgid1
+#define ur_suppgid2 ur_uc.ouc_suppgid2
+
 #define MDS_LR_CLIENT  8192
 #define MDS_LR_SIZE     128
 
@@ -141,21 +188,14 @@ struct mds_client_data {
         __u8 padding[MDS_LR_SIZE - 74];
 };
 
-/* In-memory access to client data from MDS struct */
-struct mds_export_data {
-        struct list_head        med_open_head;
-        spinlock_t              med_open_lock;
-        struct mds_client_data *med_mcd;
-        int                     med_off;
-        struct ptlrpc_request  *med_outstanding_reply;
-};
-
 /* file data for open files on MDS */
 struct mds_file_data {
-        struct list_head     mfd_list;
-        __u64                mfd_servercookie;
-        __u64                mfd_xid;
-        struct file         *mfd_file;
+        struct portals_handle mfd_handle; /* must be first */
+        atomic_t              mfd_refcount;
+        struct list_head      mfd_list;
+        __u64                 mfd_xid;
+        int                   mfd_mode;
+        struct dentry        *mfd_dentry;
 };
 
 /* mds/mds_reint.c  */
@@ -166,41 +206,8 @@ int mds_reint_rec(struct mds_update_record *r, int offset,
 int mds_open(struct mds_update_record *rec, int offset,
              struct ptlrpc_request *req, struct lustre_handle *);
 
-/* lib/mds_updates.c */
-void mds_unpack_body(struct mds_body *b);
-void mds_unpack_fid(struct ll_fid *fid);
-void mds_pack_fid(struct ll_fid *fid);
-void mds_pack_req_body(struct ptlrpc_request *);
-void mds_pack_rep_body(struct ptlrpc_request *);
-int mds_update_unpack(struct ptlrpc_request *, int offset,
-                      struct mds_update_record *);
-
-void mds_readdir_pack(struct ptlrpc_request *req, __u64 offset, obd_id ino,
-                      int type, __u64 xid);
-void mds_getattr_pack(struct ptlrpc_request *req, int valid, int offset, int fl,
-                      struct inode *inode, const char *name, int namelen);
-void mds_setattr_pack(struct ptlrpc_request *, struct inode *,
-                      struct iattr *, void *ea, int ealen);
-void mds_create_pack(struct ptlrpc_request *, int offset, struct inode *dir,
-                     __u32 mode, __u64 rdev, __u32 uid, __u32 gid, __u64 time,
-                     const char *name, int namelen, const void *data,
-                     int datalen);
-void mds_open_pack(struct ptlrpc_request *, int offset, struct inode *dir,
-                     __u32 mode, __u64 rdev, __u32 uid, __u32 gid, __u64 time,
-                     __u32 flags, const char *name, int namelen,
-                     const void *data, int datalen);
-void mds_unlink_pack(struct ptlrpc_request *, int offset, struct inode *inode,
-                     struct inode *child, __u32 mode, const char *name,
-                     int namelen);
-void mds_link_pack(struct ptlrpc_request *, int offset, struct inode *ino,
-                   struct inode *dir, const char *name, int namelen);
-void mds_rename_pack(struct ptlrpc_request *, int offset, struct inode *srcdir,
-                     struct inode *tgtdir, const char *name, int namelen,
-                     const char *tgt, int tgtlen);
-void mds_pack_inode2fid(struct ll_fid *fid, struct inode *inode);
-void mds_pack_inode2body(struct mds_body *body, struct inode *inode);
-
 /* mds/handler.c */
+#ifdef __KERNEL__
 struct dentry *mds_name2locked_dentry(struct obd_device *, struct dentry *dir,
                                       struct vfsmount **mnt, char *name,
                                       int namelen, int lock_mode,
@@ -214,64 +221,60 @@ struct dentry *mds_fid2dentry(struct mds_obd *mds, struct ll_fid *fid,
 int mds_reint(struct ptlrpc_request *req, int offset, struct lustre_handle *);
 int mds_pack_md(struct obd_device *mds, struct lustre_msg *msg,
                 int offset, struct mds_body *body, struct inode *inode);
-void mds_steal_ack_locks(struct mds_export_data *med,
+void mds_steal_ack_locks(struct obd_export *exp,
                          struct ptlrpc_request *req);
 
 /* mds/mds_fs.c */
 int mds_fs_setup(struct obd_device *obddev, struct vfsmount *mnt);
-int mds_fs_cleanup(struct obd_device *obddev);
+int mds_fs_cleanup(struct obd_device *obddev, int failover);
+#endif
 
 /* mdc/mdc_request.c */
 int mdc_enqueue(struct lustre_handle *conn, int lock_type,
-                struct lookup_intent *it, int lock_mode, struct inode *dir,
-                struct dentry *de, struct lustre_handle *lockh, char *tgt,
-                int tgtlen, void *data, int datalen);
-int mdc_cancel_unused(struct lustre_handle *conn, struct inode *, int flags);
+                struct lookup_intent *it, int lock_mode,
+                struct mdc_op_data *enq_data,
+                struct lustre_handle *lockh, char *tgt, int tgtlen,
+                ldlm_completion_callback cb_completion,
+                ldlm_blocking_callback cb_blocking,
+                void *cb_data);
 int mdc_getlovinfo(struct obd_device *obd, struct lustre_handle *mdc_connh,
                    struct ptlrpc_request **request);
 int mdc_getstatus(struct lustre_handle *conn, struct ll_fid *rootfid);
-int mdc_getattr(struct lustre_handle *conn,
-                obd_id ino, int type, unsigned long valid, unsigned int ea_size,
+int mdc_getattr(struct lustre_handle *conn, struct ll_fid *fid,
+                unsigned long valid, unsigned int ea_size,
                 struct ptlrpc_request **request);
-int mdc_getattr_name(struct lustre_handle *conn, struct inode *parent,
+int mdc_getattr_name(struct lustre_handle *conn, struct ll_fid *fid,
                      char *filename, int namelen, unsigned long valid,
                      unsigned int ea_size, struct ptlrpc_request **request);
 int mdc_setattr(struct lustre_handle *conn,
-                struct inode *, struct iattr *iattr,
-                void *ea, int ealen, struct ptlrpc_request **);
+                struct mdc_op_data *data,
+                struct iattr *iattr, void *ea, int ealen,
+                struct ptlrpc_request **request);
 int mdc_open(struct lustre_handle *conn, obd_id ino, int type, int flags,
              struct lov_mds_md *lmm, int lmm_size, struct lustre_handle *fh,
              struct ptlrpc_request **);
-void mdc_set_open_replay_data(struct ll_file_data *fd);
+struct obd_client_handle;
+void mdc_set_open_replay_data(struct obd_client_handle *och);
 int mdc_close(struct lustre_handle *conn, obd_id ino, int type,
               struct lustre_handle *fh,  struct ptlrpc_request **req);
-int mdc_readpage(struct lustre_handle *conn, obd_id ino,
-                 int type, __u64 offset, char *addr, struct ptlrpc_request **);
-int mdc_create(struct lustre_handle *conn,
-               struct inode *dir, const char *name, int namelen,
+int mdc_readpage(struct lustre_handle *conn, obd_id ino, int type, __u64 offset,
+                 struct page *, struct ptlrpc_request **);
+int mdc_create(struct lustre_handle *conn, struct mdc_op_data *op_data,
                const void *data, int datalen, int mode, __u32 uid, __u32 gid,
-               __u64 time, __u64 rdev, struct ptlrpc_request **);
-int mdc_unlink(struct lustre_handle *, struct inode *dir, struct inode *child,
-               __u32 mode, const char *name, int namelen,
-               struct ptlrpc_request **);
-int mdc_link(struct lustre_handle *conn,
-             struct inode *src, struct inode *dir, const char *name,
-             int namelen, struct ptlrpc_request **);
-int mdc_rename(struct lustre_handle *conn,
-               struct inode *src, struct inode *tgt, const char *old,
-               int oldlen, const char *new, int newlen,
-               struct ptlrpc_request **);
+               __u64 time, __u64 rdev, struct ptlrpc_request **request);
+int mdc_unlink(struct lustre_handle *conn, struct mdc_op_data *data,
+               struct ptlrpc_request **request);
+int mdc_link(struct lustre_handle *conn, struct mdc_op_data *data,
+             struct ptlrpc_request **);
+int mdc_rename(struct lustre_handle *conn, struct mdc_op_data *data,
+               const char *old, int oldlen, const char *new, int newlen,
+               struct ptlrpc_request **request);
 int mdc_create_client(struct obd_uuid uuid, struct ptlrpc_client *cl);
-void mdc_lock_set_inode(struct lustre_handle *lock, struct inode *inode);
 
 /* Store the generation of a newly-created inode in |req| for replay. */
 void mdc_store_inode_generation(struct ptlrpc_request *req, int reqoff,
                                 int repoff);
 
-int mds_client_add(struct mds_obd *mds, struct mds_export_data *med,
-                   int cl_off);
-int mds_client_free(struct obd_export *exp);
-
 
 /* ioctls for trying requests */
 #define IOC_REQUEST_TYPE                   'f'