Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / mdt / mdt_internal.h
index aabf8d7..5457a05 100644 (file)
@@ -1,34 +1,48 @@
 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
  * vim:expandtab:shiftwidth=8:tabstop=8:
  *
- *  lustre/mdt/mdt_internal.h
- *  Lustre Metadata Target (mdt) request handler
+ * GPL HEADER START
  *
- *  Copyright (c) 2006 Cluster File Systems, Inc.
- *   Author: Peter Braam <braam@clusterfs.com>
- *   Author: Andreas Dilger <adilger@clusterfs.com>
- *   Author: Phil Schwan <phil@clusterfs.com>
- *   Author: Mike Shaver <shaver@clusterfs.com>
- *   Author: Nikita Danilov <nikita@clusterfs.com>
- *   Author: Huang Hua <huanghua@clusterfs.com>
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
- *   This file is part of the Lustre file system, http://www.lustre.org
- *   Lustre is a trademark of Cluster File Systems, Inc.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
  *
- *   You may have signed or agreed to another license before downloading
- *   this software.  If so, you are bound by the terms and conditions
- *   of that agreement, and the following does not apply to you.  See the
- *   LICENSE file included with this distribution for more information.
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
  *
- *   If you did not agree to a different license, then this copy of Lustre
- *   is open source software; you can redistribute it and/or modify it
- *   under the terms of version 2 of the GNU General Public License as
- *   published by the Free Software Foundation.
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  *
- *   In either case, Lustre is distributed in the hope that it will be
- *   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
- *   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   license text for more details.
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Use is subject to license terms.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ *
+ * lustre/mdt/mdt_internal.h
+ *
+ * Lustre Metadata Target (mdt) request handler
+ *
+ * Author: Peter Braam <braam@clusterfs.com>
+ * Author: Andreas Dilger <adilger@clusterfs.com>
+ * Author: Phil Schwan <phil@clusterfs.com>
+ * Author: Mike Shaver <shaver@clusterfs.com>
+ * Author: Nikita Danilov <nikita@clusterfs.com>
+ * Author: Huang Hua <huanghua@clusterfs.com>
  */
 
 #ifndef _MDT_INTERNAL_H
 #include <lustre_idmap.h>
 #include <lustre_eacl.h>
 
-
-/* Data stored per client in the last_rcvd file.  In le32 order. */
-struct mdt_client_data {
-        __u8  mcd_uuid[40];     /* client UUID */
-        __u64 mcd_last_transno; /* last completed transaction ID */
-        __u64 mcd_last_xid;     /* xid for the last transaction */
-        __u32 mcd_last_result;  /* result from last RPC */
-        __u32 mcd_last_data;    /* per-op data (disposition for open &c.) */
-        /* for MDS_CLOSE and MDS_DONE_WRITTING requests */
-        __u64 mcd_last_close_transno; /* last completed transaction ID */
-        __u64 mcd_last_close_xid;     /* xid for the last transaction */
-        __u32 mcd_last_close_result;  /* result from last RPC */
-        __u8 mcd_padding[LR_CLIENT_SIZE - 84];
-};
-
-static inline __u64 mcd_last_transno(struct mdt_client_data *mcd)
+static inline __u64 lcd_last_transno(struct lsd_client_data *lcd)
 {
-        return max(mcd->mcd_last_transno, mcd->mcd_last_close_transno);
+        return max(lcd->lcd_last_transno, lcd->lcd_last_close_transno);
 }
 
-static inline __u64 mcd_last_xid(struct mdt_client_data *mcd)
+static inline __u64 lcd_last_xid(struct lsd_client_data *lcd)
 {
-        return max(mcd->mcd_last_xid, mcd->mcd_last_close_xid);
+        return max(lcd->lcd_last_xid, lcd->lcd_last_close_xid);
 }
 
 /* check if request's xid is equal to last one or not*/
 static inline int req_xid_is_last(struct ptlrpc_request *req)
 {
-        struct mdt_client_data *mcd = req->rq_export->exp_mdt_data.med_mcd;
-        return (req->rq_xid == mcd->mcd_last_xid ||
-                req->rq_xid == mcd->mcd_last_close_xid);
+        struct lsd_client_data *lcd = req->rq_export->exp_mdt_data.med_lcd;
+        return (req->rq_xid == lcd->lcd_last_xid ||
+                req->rq_xid == lcd->lcd_last_close_xid);
 }
 
-/* copied from lr_server_data.
- * mds data stored at the head of last_rcvd file. In le32 order. */
-struct mdt_server_data {
-        __u8  msd_uuid[40];        /* server UUID */
-        __u64 msd_last_transno;    /* last completed transaction ID */
-        __u64 msd_mount_count;     /* incarnation number */
-        __u32 msd_feature_compat;  /* compatible feature flags */
-        __u32 msd_feature_rocompat;/* read-only compatible feature flags */
-        __u32 msd_feature_incompat;/* incompatible feature flags */
-        __u32 msd_server_size;     /* size of server data area */
-        __u32 msd_client_start;    /* start of per-client data area */
-        __u16 msd_client_size;     /* size of per-client data area */
-        //__u16 msd_subdir_count;    /* number of subdirectories for objects */
-        //__u64 msd_catalog_oid;     /* recovery catalog object id */
-        //__u32 msd_catalog_ogen;    /* recovery catalog inode generation */
-        //__u8  msd_peeruuid[40];    /* UUID of MDS associated with this OST */
-        //__u32 msd_ost_index;       /* index number of OST in LOV */
-        //__u32 msd_mdt_index;       /* index number of MDT in LMV */
-        __u8  msd_padding[LR_SERVER_SIZE - 78];
-};
-
 struct mdt_object;
 /* file data for open files on MDS */
 struct mdt_file_data {
@@ -174,7 +152,7 @@ struct mdt_device {
         __u64                      mdt_mount_count;
 
         /* last_rcvd data */
-        struct mdt_server_data     mdt_msd;
+        struct lr_server_data      mdt_lsd;
         spinlock_t                 mdt_client_bitmap_lock;
         unsigned long              mdt_client_bitmap[(LR_MAX_CLIENTS >> 3) / sizeof(long)];
 
@@ -199,8 +177,7 @@ struct mdt_device {
         struct lprocfs_stats      *mdt_stats;
 };
 
-/*XXX copied from mds_internal.h */
-#define MDT_SERVICE_WATCHDOG_TIMEOUT (obd_timeout * 1000)
+#define MDT_SERVICE_WATCHDOG_FACTOR     (2000)
 #define MDT_ROCOMPAT_SUPP       (OBD_ROCOMPAT_LOVOBJID)
 #define MDT_INCOMPAT_SUPP       (OBD_INCOMPAT_MDT | OBD_INCOMPAT_COMMON_LR)
 
@@ -333,7 +310,7 @@ struct mdt_thread_info {
 
         /*
          * XXX: Part Three:
-         * The following members will be filled expilictly
+         * The following members will be filled explictly
          * with zero in mdt_reint_unpack(), because they are only used
          * by reint requests (including mdt_reint_open()).
          */
@@ -381,8 +358,8 @@ struct mdt_thread_info {
         __u64                      mti_replayepoch;
 
         /* server and client data buffers */
-        struct mdt_server_data     mti_msd;
-        struct mdt_client_data     mti_mcd;
+        struct lr_server_data      mti_lsd;
+        struct lsd_client_data     mti_lcd;
         loff_t                     mti_off;
         struct txn_param           mti_txn_param;
         struct lu_buf              mti_buf;
@@ -412,10 +389,10 @@ struct mdt_txn_info {
 extern struct lu_context_key mdt_txn_key;
 
 static inline void mdt_trans_add_cb(const struct thandle *th,
-                                    mdt_cb_t cb_func, void *cb_data) 
+                                    mdt_cb_t cb_func, void *cb_data)
 {
         struct mdt_txn_info *txi;
-        
+
         txi = lu_context_key_get(&th->th_ctx, &mdt_txn_key);
         LASSERT(txi->txi_cb_count < ARRAY_SIZE(txi->txi_cb));
 
@@ -425,7 +402,8 @@ static inline void mdt_trans_add_cb(const struct thandle *th,
         txi->txi_cb_count++;
 }
 
-static inline struct md_device_operations *mdt_child_ops(struct mdt_device * m)
+static inline const struct md_device_operations *
+mdt_child_ops(struct mdt_device * m)
 {
         LASSERT(m->mdt_child);
         return m->mdt_child->md_ops;
@@ -474,6 +452,22 @@ static inline const struct lu_fid *mdt_object_fid(struct mdt_object *o)
         return lu_object_fid(&o->mot_obj.mo_lu);
 }
 
+static inline struct lu_site *mdt_lu_site(const struct mdt_device *mdt)
+{
+        return mdt->mdt_md_dev.md_lu_dev.ld_site;
+}
+
+static inline struct md_site *mdt_md_site(const struct mdt_device *mdt)
+{
+        return lu_site2md(mdt_lu_site(mdt));
+}
+
+static inline void mdt_export_evict(struct obd_export *exp)
+{
+        class_fail_export(exp);
+        class_export_put(exp);
+}
+
 int mdt_get_disposition(struct ldlm_reply *rep, int flag);
 void mdt_set_disposition(struct mdt_thread_info *info,
                         struct ldlm_reply *rep, int flag);
@@ -547,6 +541,10 @@ int mdt_client_add(const struct lu_env *env,
 int mdt_client_new(const struct lu_env *env,
                    struct mdt_device *mdt);
 
+int mdt_export_stats_init(struct obd_device *obd,
+                          struct obd_export *exp,
+                          void *client_nid);
+
 int mdt_pin(struct mdt_thread_info* info);
 
 int mdt_lock_new_child(struct mdt_thread_info *info,
@@ -670,7 +668,7 @@ static inline int mdt_check_resent(struct mdt_thread_info *info,
                         RETURN(1);
                 }
                 DEBUG_REQ(D_HA, req, "no reply for RESENT req (have "LPD64")",
-                          req->rq_export->exp_mdt_data.med_mcd->mcd_last_xid);
+                          req->rq_export->exp_mdt_data.med_lcd->lcd_last_xid);
         }
         RETURN(0);
 }