Whamcloud - gitweb
LU-2675 llog: remove obd_llog_init() and obd_llod_finish()
[fs/lustre-release.git] / lustre / include / obd.h
index 2046f69..d85d984 100644 (file)
 
 #ifndef __OBD_H
 #define __OBD_H
-#ifndef __KERNEL__
-# error "userspace should not include <obd.h>"
-#endif
 
-#if defined(__linux__)
 #include <linux/obd.h>
-#elif defined(__APPLE__)
-#include <darwin/obd.h>
-#elif defined(__WINNT__)
-#include <winnt/obd.h>
-#else
-#error Unsupported operating system.
-#endif
 
 #include <lustre/lustre_idl.h>
 #include <lustre_lib.h>
@@ -61,6 +50,8 @@
 #include <lustre_export.h>
 #include <lustre_fid.h>
 #include <lustre_fld.h>
+#include <lustre_handles.h>
+#include <lustre_intent.h>
 #include <lustre_capa.h>
 #include <lvfs.h>
 
@@ -93,6 +84,11 @@ static inline void loi_init(struct lov_oinfo *loi)
 {
 }
 
+/* If we are unable to get the maximum object size from the OST in
+ * ocd_maxbytes using OBD_CONNECT_MAXBYTES, then we fall back to using
+ * the old maximum object size from ext3. */
+#define LUSTRE_EXT3_STRIPE_MAXBYTES 0x1fffffff000ULL
+
 struct lov_stripe_md {
        atomic_t        lsm_refc;
        spinlock_t      lsm_lock;
@@ -111,7 +107,7 @@ struct lov_stripe_md {
                 __u32 lw_pattern;          /* striping pattern (RAID0, RAID1) */
                 __u16 lw_stripe_count;  /* number of objects being striped over */
                 __u16 lw_layout_gen;       /* generation of the layout */
-                char  lw_pool_name[LOV_MAXPOOLNAME]; /* pool name */
+               char  lw_pool_name[LOV_MAXPOOLNAME + 1]; /* pool name */
         } lsm_wire;
 
         struct lov_oinfo *lsm_oinfo[0];
@@ -180,16 +176,16 @@ struct obd_info {
 };
 
 struct obd_type {
-       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;
+       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;
 };
 
 struct brw_page {
@@ -200,12 +196,12 @@ struct brw_page {
 };
 
 struct timeout_item {
-        enum timeout_event ti_event;
-        cfs_time_t         ti_timeout;
-        timeout_cb_t       ti_cb;
-        void              *ti_cb_data;
-        cfs_list_t         ti_obd_list;
-        cfs_list_t         ti_chain;
+       enum timeout_event ti_event;
+       cfs_time_t         ti_timeout;
+       timeout_cb_t       ti_cb;
+       void              *ti_cb_data;
+       struct list_head   ti_obd_list;
+       struct list_head   ti_chain;
 };
 
 #define OBD_MAX_RIF_DEFAULT    8
@@ -226,7 +222,7 @@ enum {
 struct mdc_rpc_lock;
 struct obd_import;
 struct client_obd {
-       struct rw_semaphore  cl_sem;
+       struct rw_semaphore      cl_sem;
         struct obd_uuid          cl_target_uuid;
         struct obd_import       *cl_import; /* ptlrpc connection state */
         int                      cl_conn_count;
@@ -242,26 +238,26 @@ struct client_obd {
         struct sptlrpc_flavor    cl_flvr_mgc;   /* fixed flavor of mgc->mgs */
 
        /* the grant values are protected by loi_list_lock below */
-       long                     cl_dirty_pages;      /* all _dirty_ in pages */
-       long                     cl_dirty_max_pages;  /* allowed w/o rpc */
-       long                     cl_dirty_transit;    /* dirty synchronous */
-       long                     cl_avail_grant;   /* bytes of credit for ost */
-       long                     cl_lost_grant;    /* lost credits (trunc) */
+       unsigned long            cl_dirty_pages;      /* all _dirty_ in pages */
+       unsigned long            cl_dirty_max_pages;  /* allowed w/o rpc */
+       unsigned long            cl_dirty_transit;    /* dirty synchronous */
+       unsigned long            cl_avail_grant;   /* bytes of credit for ost */
+       unsigned long            cl_lost_grant;    /* lost credits (trunc) */
 
        /* since we allocate grant by blocks, we don't know how many grant will
         * be used to add a page into cache. As a solution, we reserve maximum
         * grant before trying to dirty a page and unreserve the rest.
         * See osc_{reserve|unreserve}_grant for details. */
-       long                 cl_reserved_grant;
-       cfs_list_t           cl_cache_waiters; /* waiting for cache/grant */
-       cfs_time_t           cl_next_shrink_grant;   /* jiffies */
-       cfs_list_t           cl_grant_shrink_list;  /* Timeout event list */
-       int                  cl_grant_shrink_interval; /* seconds */
+       long                    cl_reserved_grant;
+       struct list_head        cl_cache_waiters; /* waiting for cache/grant */
+       cfs_time_t              cl_next_shrink_grant;   /* jiffies */
+       struct list_head        cl_grant_shrink_list;  /* Timeout event list */
+       int                     cl_grant_shrink_interval; /* seconds */
 
        /* A chunk is an optimal size used by osc_extent to determine
         * the extent size. A chunk is max(PAGE_CACHE_SIZE, OST block size) */
-       int                  cl_chunkbits;
-       int                  cl_extent_tax; /* extent overhead, by bytes */
+       int                     cl_chunkbits;
+       int                     cl_extent_tax;  /* extent overhead, by bytes */
 
        /* keep track of objects that have lois that contain pages which
         * have been queued for async brw.  this lock also protects the
@@ -284,49 +280,49 @@ struct client_obd {
         * NB by Jinshan: though field names are still _loi_, but actually
         * osc_object{}s are in the list.
         */
-        client_obd_lock_t        cl_loi_list_lock;
-        cfs_list_t               cl_loi_ready_list;
-        cfs_list_t               cl_loi_hp_ready_list;
-        cfs_list_t               cl_loi_write_list;
-        cfs_list_t               cl_loi_read_list;
-       int                      cl_r_in_flight;
-       int                      cl_w_in_flight;
+       client_obd_lock_t       cl_loi_list_lock;
+       struct list_head        cl_loi_ready_list;
+       struct list_head        cl_loi_hp_ready_list;
+       struct list_head        cl_loi_write_list;
+       struct list_head        cl_loi_read_list;
+       __u32                   cl_r_in_flight;
+       __u32                   cl_w_in_flight;
        /* just a sum of the loi/lop pending numbers to be exported by /proc */
-       atomic_t                 cl_pending_w_pages;
-       atomic_t                 cl_pending_r_pages;
-       __u32                    cl_max_pages_per_rpc;
-       int                      cl_max_rpcs_in_flight;
-       struct obd_histogram     cl_read_rpc_hist;
-       struct obd_histogram     cl_write_rpc_hist;
-       struct obd_histogram     cl_read_page_hist;
-       struct obd_histogram     cl_write_page_hist;
-       struct obd_histogram     cl_read_offset_hist;
-       struct obd_histogram     cl_write_offset_hist;
+       atomic_t                cl_pending_w_pages;
+       atomic_t                cl_pending_r_pages;
+       __u32                   cl_max_pages_per_rpc;
+       __u32                   cl_max_rpcs_in_flight;
+       struct obd_histogram    cl_read_rpc_hist;
+       struct obd_histogram    cl_write_rpc_hist;
+       struct obd_histogram    cl_read_page_hist;
+       struct obd_histogram    cl_write_page_hist;
+       struct obd_histogram    cl_read_offset_hist;
+       struct obd_histogram    cl_write_offset_hist;
 
        /* lru for osc caching pages */
        struct cl_client_cache  *cl_cache;
-       cfs_list_t               cl_lru_osc; /* member of cl_cache->ccc_lru */
-       atomic_t                *cl_lru_left;
-       atomic_t                 cl_lru_busy;
-       atomic_t                 cl_lru_shrinkers;
-       atomic_t                 cl_lru_in_list;
-       cfs_list_t               cl_lru_list; /* lru page list */
+       struct list_head         cl_lru_osc; /* member of cl_cache->ccc_lru */
+       atomic_long_t           *cl_lru_left;
+       atomic_long_t            cl_lru_busy;
+       atomic_long_t            cl_lru_in_list;
+       atomic_long_t            cl_unstable_count;
+       struct list_head         cl_lru_list; /* lru page list */
        client_obd_lock_t        cl_lru_list_lock; /* page list protector */
-       atomic_t                 cl_unstable_count;
+       atomic_t                 cl_lru_shrinkers;
 
        /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */
-       atomic_t             cl_destroy_in_flight;
-       wait_queue_head_t        cl_destroy_waitq;
+       atomic_t                 cl_destroy_in_flight;
+       wait_queue_head_t        cl_destroy_waitq;
 
         struct mdc_rpc_lock     *cl_rpc_lock;
         struct mdc_rpc_lock     *cl_close_lock;
 
         /* mgc datastruct */
-       struct mutex             cl_mgc_mutex;
+       struct mutex              cl_mgc_mutex;
        struct local_oid_storage *cl_mgc_los;
-       struct dt_object        *cl_mgc_configs_dir;
-       atomic_t             cl_mgc_refcount;
-       struct obd_export       *cl_mgc_mgsexp;
+       struct dt_object         *cl_mgc_configs_dir;
+       atomic_t                  cl_mgc_refcount;
+       struct obd_export        *cl_mgc_mgsexp;
 
         /* checksumming for data sent over the network */
         unsigned int             cl_checksum:1; /* 0 = disabled, 1 = enabled */
@@ -341,7 +337,7 @@ struct client_obd {
        /* used by quotacheck when the servers are older than 2.4 */
        int                      cl_qchk_stat; /* quotacheck stat of the peer */
 #define CL_NOT_QUOTACHECKED 1   /* client->cl_qchk_stat init value */
-#if LUSTRE_VERSION_CODE >= OBD_OCD_VERSION(2, 7, 50, 0)
+#if LUSTRE_VERSION_CODE >= OBD_OCD_VERSION(2, 7, 53, 0)
 #warning "please consider removing quotacheck compatibility code"
 #endif
 
@@ -364,12 +360,12 @@ struct obd_id_info {
 };
 
 struct echo_client_obd {
-       struct obd_export       *ec_exp;   /* the local connection to osc/lov */
+       struct obd_export      *ec_exp; /* the local connection to osc/lov */
        spinlock_t              ec_lock;
-        cfs_list_t           ec_objects;
-        cfs_list_t           ec_locks;
-        int                  ec_nstripes;
-        __u64                ec_unique;
+       struct list_head        ec_objects;
+       struct list_head        ec_locks;
+       int                     ec_nstripes;
+       __u64                   ec_unique;
 };
 
 /* Generic subset of OSTs */
@@ -385,7 +381,7 @@ struct ost_pool {
 #define OBD_STATFS_CACHE_SECONDS 1
 
 struct lov_tgt_desc {
-        cfs_list_t          ltd_kill;
+       struct list_head    ltd_kill;
         struct obd_uuid     ltd_uuid;
         struct obd_device  *ltd_obd;
         struct obd_export  *ltd_exp;
@@ -423,7 +419,7 @@ struct lov_obd {
 struct lmv_tgt_desc {
        struct obd_uuid         ltd_uuid;
        struct obd_export       *ltd_exp;
-       int                     ltd_idx;
+       __u32                   ltd_idx;
        struct mutex            ltd_fid_mutex;
        unsigned long           ltd_active:1; /* target up for requests */
 };
@@ -453,9 +449,8 @@ struct lmv_obd {
        int                     max_def_easize;
        int                     max_cookiesize;
        int                     max_def_cookiesize;
-       int                     server_timeout;
 
-       int                     tgts_size; /* size of tgts array */
+       __u32                   tgts_size; /* size of tgts array */
        struct lmv_tgt_desc     **tgts;
 
        struct obd_connect_data conn_data;
@@ -623,11 +618,11 @@ struct obd_device {
         cfs_hash_t             *obd_nid_hash;
        /* nid stats body */
        cfs_hash_t             *obd_nid_stats_hash;
-       cfs_list_t              obd_nid_stats;
-       atomic_t            obd_refcount;
-       cfs_list_t              obd_exports;
-       cfs_list_t              obd_unlinked_exports;
-       cfs_list_t              obd_delayed_exports;
+       struct list_head        obd_nid_stats;
+       atomic_t                obd_refcount;
+       struct list_head        obd_exports;
+       struct list_head        obd_unlinked_exports;
+       struct list_head        obd_delayed_exports;
        struct list_head        obd_lwp_list;
        int                     obd_num_exports;
        spinlock_t              obd_nid_lock;
@@ -647,37 +642,39 @@ struct obd_device {
         struct obd_notify_upcall obd_upcall;
         struct obd_export       *obd_self_export;
        struct obd_export       *obd_lwp_export;
-        /* list of exports in LRU order, for ping evictor, with obd_dev_lock */
-        cfs_list_t              obd_exports_timed;
-        time_t                  obd_eviction_timer; /* for ping evictor */
+       /* list of exports in LRU order, for ping evictor, with obd_dev_lock */
+       struct list_head        obd_exports_timed;
+       time_t                  obd_eviction_timer;     /* for ping evictor */
 
        int                     obd_max_recoverable_clients;
        atomic_t                obd_connected_clients;
        int                     obd_stale_clients;
         /* this lock protects all recovery list_heads, timer and
          * obd_next_recovery_transno value */
-       spinlock_t                       obd_recovery_task_lock;
-        __u64                            obd_next_recovery_transno;
-       int                              obd_replayed_requests;
-       int                              obd_requests_queued_for_recovery;
-       wait_queue_head_t                obd_next_transno_waitq;
+       spinlock_t              obd_recovery_task_lock;
+       __u64                   obd_next_recovery_transno;
+       int                     obd_replayed_requests;
+       int                     obd_requests_queued_for_recovery;
+       wait_queue_head_t       obd_next_transno_waitq;
        /* protected by obd_recovery_task_lock */
-       struct timer_list                obd_recovery_timer;
-       time_t                           obd_recovery_start; /* seconds */
-       time_t                           obd_recovery_end; /* seconds, for lprocfs_status */
-       int                              obd_recovery_time_hard;
-       int                              obd_recovery_timeout;
-       int                              obd_recovery_ir_factor;
+       struct timer_list       obd_recovery_timer;
+       /* seconds */
+       time_t                  obd_recovery_start;
+       /* seconds, for lprocfs_status */
+       time_t                  obd_recovery_end;
+       int                     obd_recovery_time_hard;
+       int                     obd_recovery_timeout;
+       int                     obd_recovery_ir_factor;
 
        /* new recovery stuff from CMD2 */
-       struct target_recovery_data      obd_recovery_data;
-       int                              obd_replayed_locks;
-       atomic_t                     obd_req_replay_clients;
-       atomic_t                     obd_lock_replay_clients;
+       struct target_recovery_data     obd_recovery_data;
+       int                             obd_replayed_locks;
+       atomic_t                        obd_req_replay_clients;
+       atomic_t                        obd_lock_replay_clients;
        /* all lists are protected by obd_recovery_task_lock */
-       cfs_list_t                       obd_req_replay_queue;
-       cfs_list_t                       obd_lock_replay_queue;
-       cfs_list_t                       obd_final_req_queue;
+       struct list_head                obd_req_replay_queue;
+       struct list_head                obd_lock_replay_queue;
+       struct list_head                obd_final_req_queue;
 
        union {
 #ifdef HAVE_SERVER_SUPPORT
@@ -705,14 +702,14 @@ struct obd_device {
        struct lprocfs_seq_vars *obd_vars;
        atomic_t                obd_evict_inprogress;
        wait_queue_head_t       obd_evict_inprogress_waitq;
-       cfs_list_t              obd_evict_list; /* protected with pet_lock */
+       struct list_head        obd_evict_list; /* protected with pet_lock */
 
         /**
          * Ldlm pool part. Save last calculated SLV and Limit.
          */
        rwlock_t                obd_pool_lock;
-        int                    obd_pool_limit;
-        __u64                  obd_pool_slv;
+       int                     obd_pool_limit;
+       __u64                   obd_pool_slv;
 
         /**
          * A list of outstanding class_incref()'s against this obd. For
@@ -810,7 +807,7 @@ struct md_op_data {
         struct lu_fid           op_fid2; /* operation fid2 (usualy child) */
         struct lu_fid           op_fid3; /* 2 extra fids to find conflicting */
         struct lu_fid           op_fid4; /* to the operation locks. */
-        mdsno_t                 op_mds;  /* what mds server open will go to */
+       u32                     op_mds;  /* what mds server open will go to */
         struct lustre_handle    op_handle;
         obd_time                op_mod_time;
         const char             *op_name;
@@ -875,13 +872,12 @@ struct md_enqueue_info {
         struct inode           *mi_dir;
         md_enqueue_cb_t         mi_cb;
         __u64                   mi_cbdata;
-        unsigned int            mi_generation;
 };
 
 struct obd_ops {
        struct module *o_owner;
        int (*o_iocontrol)(unsigned int cmd, struct obd_export *exp, int len,
-                          void *karg, void *uarg);
+                          void *karg, void __user *uarg);
         int (*o_get_info)(const struct lu_env *env, struct obd_export *,
                           __u32 keylen, void *key, __u32 *vallen, void *val,
                           struct lov_stripe_md *lsm);
@@ -969,11 +965,6 @@ struct obd_ops {
         int (*o_init_export)(struct obd_export *exp);
         int (*o_destroy_export)(struct obd_export *exp);
 
-        /* llog related obd_methods */
-        int (*o_llog_init)(struct obd_device *obd, struct obd_llog_group *grp,
-                           struct obd_device *disk_obd, int *idx);
-        int (*o_llog_finish)(struct obd_device *obd, int count);
-
         int (*o_import_event)(struct obd_device *, struct obd_import *,
                               enum obd_import_event);
 
@@ -1027,6 +1018,17 @@ struct md_open_data {
        bool                             mod_is_create;
 };
 
+struct obd_client_handle {
+       struct lustre_handle     och_fh;
+       struct lu_fid            och_fid;
+       struct md_open_data     *och_mod;
+       struct lustre_handle     och_lease_handle; /* open lock for lease */
+       __u32                    och_magic;
+       int                      och_flags;
+};
+
+#define OBD_CLIENT_HANDLE_MAGIC 0xd15ea5ed
+
 struct lookup_intent;
 struct cl_attr;
 
@@ -1297,8 +1299,8 @@ static inline void client_adjust_max_dirty(struct client_obd *cli)
                cli->cl_dirty_max_pages = (OSC_MAX_DIRTY_DEFAULT * 1024 * 1024)
                                                        >> PAGE_CACHE_SHIFT;
        else {
-               long dirty_max = cli->cl_max_rpcs_in_flight *
-                                               cli->cl_max_pages_per_rpc;
+               unsigned long dirty_max = cli->cl_max_rpcs_in_flight *
+                                         cli->cl_max_pages_per_rpc;
 
                if (dirty_max > cli->cl_dirty_max_pages)
                        cli->cl_dirty_max_pages = dirty_max;