Whamcloud - gitweb
LU-4603 lmv: a few fixes about readdir of striped dir.
[fs/lustre-release.git] / lustre / include / obd.h
index ac5fa1d..94f9d8c 100644 (file)
@@ -36,6 +36,9 @@
 
 #ifndef __OBD_H
 #define __OBD_H
+#ifndef __KERNEL__
+# error "userspace should not include <obd.h>"
+#endif
 
 #if defined(__linux__)
 #include <linux/obd.h>
 #error Unsupported operating system.
 #endif
 
-#define IOC_OSC_TYPE         'h'
-#define IOC_OSC_MIN_NR       20
-#define IOC_OSC_SET_ACTIVE   _IOWR(IOC_OSC_TYPE, 21, struct obd_device *)
-#define IOC_OSC_MAX_NR       50
-
-#define IOC_MDC_TYPE         'i'
-#define IOC_MDC_MIN_NR       20
-#define IOC_MDC_MAX_NR       50
-
 #include <lustre/lustre_idl.h>
 #include <lustre_lib.h>
 #include <libcfs/bitmap.h>
@@ -239,12 +233,12 @@ struct timeout_item {
         cfs_list_t         ti_chain;
 };
 
-#define OSC_MAX_RIF_DEFAULT       8
-#define MDS_OSC_MAX_RIF_DEFAULT   50
-#define OSC_MAX_RIF_MAX         256
-#define OSC_MAX_DIRTY_DEFAULT  (OSC_MAX_RIF_DEFAULT * 4)
-#define OSC_MAX_DIRTY_MB_MAX   2048     /* arbitrary, but < MAX_LONG bytes */
-#define OSC_DEFAULT_RESENDS      10
+#define OBD_MAX_RIF_DEFAULT    8
+#define OBD_MAX_RIF_MAX                512
+#define OSC_MAX_RIF_MAX                256
+#define OSC_MAX_DIRTY_DEFAULT  (OBD_MAX_RIF_DEFAULT * 4)
+#define OSC_MAX_DIRTY_MB_MAX   2048     /* arbitrary, but < MAX_LONG bytes */
+#define OSC_DEFAULT_RESENDS    10
 
 /* possible values for fo_sync_lock_cancel */
 enum {
@@ -254,9 +248,6 @@ enum {
         NUM_SYNC_ON_CANCEL_STATES
 };
 
-#define MDC_MAX_RIF_DEFAULT       8
-#define MDC_MAX_RIF_MAX         512
-
 struct mdc_rpc_lock;
 struct obd_import;
 struct client_obd {
@@ -438,14 +429,15 @@ struct lov_obd {
                                                           array */
        struct mutex            lov_lock;
        struct obd_connect_data lov_ocd;
+       struct proc_dir_entry  *targets_proc_entry;
        atomic_t                lov_refcount;
        __u32                   lov_death_row;  /* tgts scheduled to be deleted */
        __u32                   lov_tgt_size;   /* size of tgts array */
        int                     lov_connects;
        int                     lov_pool_count;
        cfs_hash_t             *lov_pools_hash_body; /* used for key access */
-       cfs_list_t              lov_pool_list;  /* used for sequential access */
-       cfs_proc_dir_entry_t   *lov_pool_proc_entry;
+       struct list_head        lov_pool_list;  /* used for sequential access */
+       struct proc_dir_entry  *lov_pool_proc_entry;
        enum lustre_sec_part    lov_sp_me;
 
        /* Cached LRU and unstable data from upper layer */
@@ -479,6 +471,7 @@ struct lmv_obd {
        struct lmv_desc         desc;
        struct obd_uuid         cluuid;
        struct obd_export       *exp;
+       struct proc_dir_entry   *targets_proc_entry;
 
        struct mutex            init_mutex;
        int                     connected;
@@ -714,7 +707,6 @@ struct obd_llog_group {
 
 /* corresponds to one of the obd's */
 #define OBD_DEVICE_MAGIC        0XAB5CD6EF
-#define OBD_DEV_BY_DEVNAME      0xffffd0de
 
 struct obd_device {
        struct obd_type         *obd_type;
@@ -968,6 +960,7 @@ struct md_op_data {
         __u32                   op_fsgid;
         cfs_cap_t               op_cap;
         void                   *op_data;
+       size_t                  op_data_size;
 
         /* iattr fields and blocks. */
         struct iattr            op_attr;
@@ -991,6 +984,10 @@ struct md_op_data {
        /* Used by readdir */
        __u64                   op_hash_offset;
 
+       /* The offset of dir entry among the same hash entries, which
+        * is used to resolve the hash conflict. */
+       __u32                   op_same_hash_offset;
+
        /* Used by readdir */
        __u32                   op_npages;
 
@@ -1071,9 +1068,9 @@ struct obd_ops {
                          struct obd_export *exp, enum lu_cli_type type);
        int (*o_fid_fini)(struct obd_device *obd);
 
-        /* Allocate new fid according to passed @hint. */
-        int (*o_fid_alloc)(struct obd_export *exp, struct lu_fid *fid,
-                           struct md_op_data *op_data);
+       /* Allocate new fid according to passed @hint. */
+       int (*o_fid_alloc)(const struct lu_env *env, struct obd_export *exp,
+                          struct lu_fid *fid, struct md_op_data *op_data);
 
         /*
          * Object with @fid is getting deleted, we may want to do something
@@ -1213,15 +1210,15 @@ struct md_ops {
                        __u64, struct ptlrpc_request **);
 
        int (*m_enqueue)(struct obd_export *, struct ldlm_enqueue_info *,
+                        const union ldlm_policy_data *,
                         struct lookup_intent *, struct md_op_data *,
-                        struct lustre_handle *, void *, int,
-                        struct ptlrpc_request **, __u64);
+                        struct lustre_handle *, __u64);
 
        int (*m_getattr)(struct obd_export *, struct md_op_data *,
                         struct ptlrpc_request **);
 
        int (*m_intent_lock)(struct obd_export *, struct md_op_data *,
-                            void *, int, struct lookup_intent *, int,
+                            struct lookup_intent *,
                             struct ptlrpc_request **,
                             ldlm_blocking_callback, __u64);
 
@@ -1457,4 +1454,16 @@ static inline int cli_brw_size(struct obd_device *obd)
        return obd->u.cli.cl_max_pages_per_rpc << PAGE_CACHE_SHIFT;
 }
 
+static inline void client_adjust_max_dirty(struct client_obd *cli)
+{
+        /* initializing */
+       if (cli->cl_dirty_max <= 0)
+               cli->cl_dirty_max = OSC_MAX_DIRTY_DEFAULT * 1024 * 1024;
+       else
+               cli->cl_dirty_max = cli->cl_max_rpcs_in_flight *
+                       (cli->cl_max_pages_per_rpc << PAGE_CACHE_SHIFT);
+       if (cli->cl_dirty_max >> PAGE_CACHE_SHIFT > totalram_pages / 8)
+               cli->cl_dirty_max = totalram_pages << (PAGE_CACHE_SHIFT - 3);
+}
+
 #endif /* __OBD_H */