#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>
};
struct obd_type {
- cfs_list_t typ_chain;
- struct obd_ops *typ_dt_ops;
- struct md_ops *typ_md_ops;
- cfs_proc_dir_entry_t *typ_procroot;
- char *typ_name;
- int typ_refcnt;
- struct lu_device_type *typ_lu;
+ struct list_head typ_chain;
+ struct obd_ops *typ_dt_ops;
+ struct md_ops *typ_md_ops;
+ struct proc_dir_entry *typ_procroot;
+ struct proc_dir_entry *typ_procsym;
+ __u32 typ_sym_filter;
+ char *typ_name;
+ int typ_refcnt;
+ struct lu_device_type *typ_lu;
spinlock_t obd_type_lock;
};
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 {
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 {
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 */
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;
/* 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;
struct proc_dir_entry *obd_proc_entry;
struct proc_dir_entry *obd_proc_exports_entry;
- void *obd_proc_private; /* type private PDEs */
struct proc_dir_entry *obd_svc_procroot;
struct lprocfs_stats *obd_svc_stats;
struct lprocfs_seq_vars *obd_vars;
__u32 op_fsgid;
cfs_cap_t op_cap;
void *op_data;
+ size_t op_data_size;
/* iattr fields and blocks. */
struct iattr op_attr;
/* 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;
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
__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);
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 */