Whamcloud - gitweb
LU-4961 lustre: remove liblustre.h and obd.h from userspace
[fs/lustre-release.git] / lustre / include / obd.h
index fd0d2e2..9967577 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>
@@ -68,6 +62,7 @@
 #include <lustre_fid.h>
 #include <lustre_fld.h>
 #include <lustre_capa.h>
+#include <lvfs.h>
 
 #define MAX_OBD_DEVICES 8192
 
@@ -99,13 +94,13 @@ static inline void loi_init(struct lov_oinfo *loi)
 }
 
 struct lov_stripe_md {
-       cfs_atomic_t     lsm_refc;
+       atomic_t        lsm_refc;
        spinlock_t      lsm_lock;
-        pid_t            lsm_lock_owner; /* debugging */
+       pid_t           lsm_lock_owner; /* debugging */
 
-        /* maximum possible file size, might change as OSTs status changes,
-         * e.g. disconnected, deactivated */
-        __u64            lsm_maxbytes;
+       /* maximum possible file size, might change as OSTs status changes,
+        * e.g. disconnected, deactivated */
+       __u64            lsm_maxbytes;
         struct {
                 /* Public members. */
                struct ost_id lw_object_oi; /* lov object id/seq */
@@ -144,6 +139,13 @@ static inline bool lsm_has_objects(struct lov_stripe_md *lsm)
        return true;
 }
 
+static inline int lov_stripe_md_size(unsigned int stripe_count)
+{
+       struct lov_stripe_md lsm;
+
+       return sizeof(lsm) + stripe_count * sizeof(lsm.lsm_oinfo[0]);
+}
+
 struct obd_info;
 
 typedef int (*obd_enqueue_update_f)(void *cookie, int rc);
@@ -181,79 +183,16 @@ struct obd_info {
        char                   *oi_jobid;
 };
 
-/* compare all relevant fields. */
-static inline int lov_stripe_md_cmp(struct lov_stripe_md *m1,
-                                    struct lov_stripe_md *m2)
-{
-        /*
-         * ->lsm_wire contains padding, but it should be zeroed out during
-         * allocation.
-         */
-        return memcmp(&m1->lsm_wire, &m2->lsm_wire, sizeof m1->lsm_wire);
-}
-
-static inline int lov_lum_lsm_cmp(struct lov_user_md *lum,
-                                  struct lov_stripe_md  *lsm)
-{
-        if (lsm->lsm_magic != lum->lmm_magic)
-                return 1;
-        if ((lsm->lsm_stripe_count != 0) && (lum->lmm_stripe_count != 0) &&
-            (lsm->lsm_stripe_count != lum->lmm_stripe_count))
-                return 2;
-        if ((lsm->lsm_stripe_size != 0) && (lum->lmm_stripe_size != 0) &&
-            (lsm->lsm_stripe_size != lum->lmm_stripe_size))
-                return 3;
-        if ((lsm->lsm_pattern != 0) && (lum->lmm_pattern != 0) &&
-            (lsm->lsm_pattern != lum->lmm_pattern))
-                return 4;
-        if ((lsm->lsm_magic == LOV_MAGIC_V3) &&
-            (strncmp(lsm->lsm_pool_name,
-                     ((struct lov_user_md_v3 *)lum)->lmm_pool_name,
-                     LOV_MAXPOOLNAME) != 0))
-                return 5;
-        return 0;
-}
-
-static inline int lov_lum_swab_if_needed(struct lov_user_md_v3 *lumv3,
-                                        int *lmm_magic,
-                                        struct lov_user_md *lum)
-{
-       if (lum && copy_from_user(lumv3, lum, sizeof(struct lov_user_md_v1)))
-               return -EFAULT;
-
-       *lmm_magic = lumv3->lmm_magic;
-
-       if (*lmm_magic == __swab32(LOV_USER_MAGIC_V1)) {
-               lustre_swab_lov_user_md_v1((struct lov_user_md_v1 *)lumv3);
-               *lmm_magic = LOV_USER_MAGIC_V1;
-       } else if (*lmm_magic == LOV_USER_MAGIC_V3) {
-               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
-                       return -EFAULT;
-       } else if (*lmm_magic == __swab32(LOV_USER_MAGIC_V3)) {
-               if (lum && copy_from_user(lumv3, lum, sizeof(*lumv3)))
-                       return -EFAULT;
-               lustre_swab_lov_user_md_v3(lumv3);
-               *lmm_magic = LOV_USER_MAGIC_V3;
-       } else if (*lmm_magic != LOV_USER_MAGIC_V1) {
-               CDEBUG(D_IOCTL,
-                      "bad userland LOV MAGIC: %#08x != %#08x nor %#08x\n",
-                      *lmm_magic, LOV_USER_MAGIC_V1, LOV_USER_MAGIC_V3);
-                      return -EINVAL;
-       }
-       return 0;
-}
-
-void lov_stripe_lock(struct lov_stripe_md *md);
-void lov_stripe_unlock(struct lov_stripe_md *md);
-
 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;
 };
 
@@ -294,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 {
@@ -309,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 {
@@ -319,11 +255,12 @@ struct client_obd {
         struct obd_uuid          cl_target_uuid;
         struct obd_import       *cl_import; /* ptlrpc connection state */
         int                      cl_conn_count;
-        /* max_mds_easize is purely a performance thing so we don't have to
-         * call obd_size_diskmd() all the time. */
-        int                      cl_default_mds_easize;
-        int                      cl_max_mds_easize;
-        int                      cl_max_mds_cookiesize;
+       /* max_mds_easize is purely a performance thing so we don't have to
+        * call obd_size_diskmd() all the time. */
+       int                      cl_default_mds_easize;
+       int                      cl_max_mds_easize;
+       int                      cl_default_mds_cookiesize;
+       int                      cl_max_mds_cookiesize;
 
         enum lustre_sec_part     cl_sp_me;
         enum lustre_sec_part     cl_sp_to;
@@ -352,9 +289,9 @@ struct client_obd {
        int                  cl_chunk;
        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
-         * lists of osc_client_pages that hang off of the loi */
+       /* keep track of objects that have lois that contain pages which
+        * have been queued for async brw.  this lock also protects the
+        * lists of osc_client_pages that hang off of the loi */
         /*
          * ->cl_loi_list_lock protects consistency of
          * ->cl_loi_{ready,read,write}_list. ->ap_make_ready() and
@@ -378,44 +315,44 @@ struct client_obd {
         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;
-        /* just a sum of the loi/lop pending numbers to be exported by /proc */
-       cfs_atomic_t             cl_pending_w_pages;
-       cfs_atomic_t             cl_pending_r_pages;
+       int                      cl_r_in_flight;
+       int                      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;
+       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;
 
        /* lru for osc caching pages */
        struct cl_client_cache  *cl_cache;
        cfs_list_t               cl_lru_osc; /* member of cl_cache->ccc_lru */
-       cfs_atomic_t            *cl_lru_left;
-       cfs_atomic_t             cl_lru_busy;
-       cfs_atomic_t             cl_lru_shrinkers;
-       cfs_atomic_t             cl_lru_in_list;
+       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 */
        client_obd_lock_t        cl_lru_list_lock; /* page list protector */
-       cfs_atomic_t             cl_unstable_count;
+       atomic_t                 cl_unstable_count;
 
-        /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */
-        cfs_atomic_t             cl_destroy_in_flight;
+       /* 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;
 
         struct mdc_rpc_lock     *cl_rpc_lock;
         struct mdc_rpc_lock     *cl_close_lock;
 
         /* mgc datastruct */
-       struct semaphore         cl_mgc_sem;
+       struct mutex             cl_mgc_mutex;
        struct local_oid_storage *cl_mgc_los;
        struct dt_object        *cl_mgc_configs_dir;
-        cfs_atomic_t             cl_mgc_refcount;
-        struct obd_export       *cl_mgc_mgsexp;
+       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 */
@@ -434,10 +371,10 @@ struct client_obd {
 #warning "please consider removing quotacheck compatibility code"
 #endif
 
-        /* sequence manager */
-        struct lu_client_seq    *cl_seq;
+       /* sequence manager */
+       struct lu_client_seq    *cl_seq;
 
-        cfs_atomic_t             cl_resends; /* resend count */
+       atomic_t             cl_resends; /* resend count */
 
        /* ptlrpc work for writeback in ptlrpcd context */
        void                    *cl_writeback_work;
@@ -461,25 +398,6 @@ struct echo_client_obd {
         __u64                ec_unique;
 };
 
-struct lov_qos_oss {
-        struct obd_uuid     lqo_uuid;       /* ptlrpc's c_remote_uuid */
-        cfs_list_t          lqo_oss_list;   /* link to lov_qos */
-        __u64               lqo_bavail;     /* total bytes avail on OSS */
-        __u64               lqo_penalty;    /* current penalty */
-        __u64               lqo_penalty_per_obj;/* penalty decrease every obj*/
-        time_t              lqo_used;       /* last used time, seconds */
-        __u32               lqo_ost_count;  /* number of osts on this oss */
-};
-
-struct ltd_qos {
-        struct lov_qos_oss *ltq_oss;         /* oss info */
-        __u64               ltq_penalty;     /* current penalty */
-        __u64               ltq_penalty_per_obj; /* penalty decrease every obj*/
-        __u64               ltq_weight;      /* net weighting */
-        time_t              ltq_used;        /* last used time, seconds */
-        unsigned int        ltq_usable:1;    /* usable for striping */
-};
-
 /* Generic subset of OSTs */
 struct ost_pool {
         __u32              *op_array;      /* array of index of
@@ -489,48 +407,14 @@ struct ost_pool {
        struct rw_semaphore op_rw_sem;     /* to protect ost_pool use */
 };
 
-/* Round-robin allocator data */
-struct lov_qos_rr {
-        __u32               lqr_start_idx;   /* start index of new inode */
-        __u32               lqr_offset_idx;  /* aliasing for start_idx  */
-        int                 lqr_start_count; /* reseed counter */
-        struct ost_pool     lqr_pool;        /* round-robin optimized list */
-        unsigned long       lqr_dirty:1;     /* recalc round-robin list */
-};
-
 /* allow statfs data caching for 1 second */
 #define OBD_STATFS_CACHE_SECONDS 1
 
-struct lov_statfs_data {
-        struct obd_info   lsd_oi;
-        struct obd_statfs lsd_statfs;
-};
-/* Stripe placement optimization */
-struct lov_qos {
-        cfs_list_t          lq_oss_list; /* list of OSSs that targets use */
-       struct rw_semaphore lq_rw_sem;
-        __u32               lq_active_oss_count;
-        unsigned int        lq_prio_free;   /* priority for free space */
-        unsigned int        lq_threshold_rr;/* priority for rr */
-        struct lov_qos_rr   lq_rr;          /* round robin qos data */
-        unsigned long       lq_dirty:1,     /* recalc qos data */
-                            lq_same_space:1,/* the ost's all have approx.
-                                               the same space avail */
-                            lq_reset:1,     /* zero current penalties */
-                            lq_statfs_in_progress:1; /* statfs op in
-                                                        progress */
-       /* qos statfs data */
-       struct lov_statfs_data *lq_statfs_data;
-       wait_queue_head_t   lq_statfs_waitq; /* waitqueue to notify statfs
-                                             * requests completion */
-};
-
 struct lov_tgt_desc {
         cfs_list_t          ltd_kill;
         struct obd_uuid     ltd_uuid;
         struct obd_device  *ltd_obd;
         struct obd_export  *ltd_exp;
-        struct ltd_qos      ltd_qos;     /* qos info per target */
         __u32               ltd_gen;
         __u32               ltd_index;   /* index in lov_obd->tgts */
         unsigned long       ltd_active:1,/* is this target up for requests */
@@ -538,47 +422,27 @@ struct lov_tgt_desc {
                             ltd_reap:1;  /* should this target be deleted */
 };
 
-/* Pool metadata */
-#define pool_tgt_size(_p)   _p->pool_obds.op_size
-#define pool_tgt_count(_p)  _p->pool_obds.op_count
-#define pool_tgt_array(_p)  _p->pool_obds.op_array
-#define pool_tgt_rw_sem(_p) _p->pool_obds.op_rw_sem
-
-struct pool_desc {
-        char                  pool_name[LOV_MAXPOOLNAME + 1]; /* name of pool */
-        struct ost_pool       pool_obds;              /* pool members */
-        cfs_atomic_t          pool_refcount;          /* pool ref. counter */
-        struct lov_qos_rr     pool_rr;                /* round robin qos */
-        cfs_hlist_node_t      pool_hash;              /* access by poolname */
-        cfs_list_t            pool_list;              /* serial access */
-        cfs_proc_dir_entry_t *pool_proc_entry;        /* file in /proc */
-       struct obd_device    *pool_lobd;              /* obd of the lov/lod to which
-                                                      * this pool belongs */
-};
-
 struct lov_obd {
-        struct lov_desc         desc;
-        struct lov_tgt_desc   **lov_tgts;              /* sparse array */
-        struct ost_pool         lov_packed;            /* all OSTs in a packed
-                                                          array */
+       struct lov_desc         desc;
+       struct lov_tgt_desc   **lov_tgts;               /* sparse array */
+       struct ost_pool         lov_packed;             /* all OSTs in a packed
+                                                          array */
        struct mutex            lov_lock;
-        struct obd_connect_data lov_ocd;
-        cfs_atomic_t            lov_refcount;
-        __u32                   lov_tgt_count;         /* how many OBD's */
-        __u32                   lov_active_tgt_count;  /* how many active */
-        __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;
-        enum lustre_sec_part    lov_sp_me;
+       struct obd_connect_data lov_ocd;
+       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;
+       enum lustre_sec_part    lov_sp_me;
 
        /* Cached LRU and unstable data from upper layer */
        void                   *lov_cache;
 
-       struct rw_semaphore     lov_notify_lock;
+       struct rw_semaphore     lov_notify_lock;
 };
 
 struct lmv_tgt_desc {
@@ -612,6 +476,7 @@ struct lmv_obd {
        int                     max_easize;
        int                     max_def_easize;
        int                     max_cookiesize;
+       int                     max_def_cookiesize;
        int                     server_timeout;
 
        int                     tgts_size; /* size of tgts array */
@@ -840,7 +705,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;
@@ -882,14 +746,15 @@ struct obd_device {
         cfs_hash_t             *obd_uuid_hash;
         /* nid-export hash body */
         cfs_hash_t             *obd_nid_hash;
-        /* nid stats body */
-        cfs_hash_t             *obd_nid_stats_hash;
-        cfs_list_t              obd_nid_stats;
-        cfs_atomic_t            obd_refcount;
-        cfs_list_t              obd_exports;
-        cfs_list_t              obd_unlinked_exports;
-        cfs_list_t              obd_delayed_exports;
-        int                     obd_num_exports;
+       /* 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_lwp_list;
+       int                     obd_num_exports;
        spinlock_t              obd_nid_lock;
        struct ldlm_namespace  *obd_namespace;
        struct ptlrpc_client    obd_ldlm_client; /* XXX OST/MDS only */
@@ -906,14 +771,15 @@ struct obd_device {
        struct rw_semaphore     obd_observer_link_sem;
         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 */
 
-        int                              obd_max_recoverable_clients;
-        cfs_atomic_t                     obd_connected_clients;
-        int                              obd_stale_clients;
-        int                              obd_delayed_clients;
+       int                     obd_max_recoverable_clients;
+       atomic_t                obd_connected_clients;
+       int                     obd_stale_clients;
+       int                     obd_delayed_clients;
         /* this lock protects all recovery list_heads, timer and
          * obd_next_recovery_transno value */
        spinlock_t                       obd_recovery_task_lock;
@@ -929,15 +795,15 @@ struct obd_device {
        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;
-        cfs_atomic_t                     obd_req_replay_clients;
-        cfs_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;
+       /* 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;
+       /* 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;
 
        union {
 #ifdef HAVE_SERVER_SUPPORT
@@ -958,13 +824,14 @@ struct obd_device {
        unsigned int           obd_md_cntr_base;
        struct lprocfs_stats  *obd_md_stats;
 
-        cfs_proc_dir_entry_t  *obd_proc_entry;
-        cfs_proc_dir_entry_t  *obd_proc_exports_entry;
-        cfs_proc_dir_entry_t  *obd_svc_procroot;
-        struct lprocfs_stats  *obd_svc_stats;
-       cfs_atomic_t           obd_evict_inprogress;
-       wait_queue_head_t      obd_evict_inprogress_waitq;
-       cfs_list_t             obd_evict_list; /* protected with pet_lock */
+       struct proc_dir_entry   *obd_proc_entry;
+       struct proc_dir_entry   *obd_proc_exports_entry;
+       struct proc_dir_entry   *obd_svc_procroot;
+       struct lprocfs_stats    *obd_svc_stats;
+       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 */
 
         /**
          * Ldlm pool part. Save last calculated SLV and Limit.
@@ -1015,7 +882,10 @@ enum obd_cleanup_stage {
 #define KEY_LOCK_TO_STRIPE      "lock_to_stripe"
 #define KEY_LOVDESC             "lovdesc"
 #define KEY_LOV_IDX             "lov_idx"
-#define KEY_MAX_EASIZE          "max_easize"
+#define KEY_MAX_EASIZE         "max_easize"
+#define KEY_DEFAULT_EASIZE     "default_easize"
+#define KEY_MAX_COOKIESIZE     "max_cookiesize"
+#define KEY_DEFAULT_COOKIESIZE "default_cookiesize"
 #define KEY_MDS_CONN            "mds_conn"
 #define KEY_MGSSEC              "mgssec"
 #define KEY_NEXT_ID             "next_id"
@@ -1031,6 +901,7 @@ enum obd_cleanup_stage {
 #define KEY_CACHE_SET          "cache_set"
 #define KEY_CACHE_LRU_SHRINK   "cache_lru_shrink"
 #define KEY_CHANGELOG_INDEX    "changelog_index"
+#define KEY_OSP_CONNECTED      "osp_connected"
 
 struct lu_context;
 
@@ -1052,19 +923,21 @@ struct lu_context;
 
 static inline int it_to_lock_mode(struct lookup_intent *it)
 {
-        /* CREAT needs to be tested before open (both could be set) */
-        if (it->it_op & IT_CREAT)
-                return LCK_CW;
-        else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_LOOKUP |
-                              IT_LAYOUT))
-                return LCK_CR;
+       /* CREAT needs to be tested before open (both could be set) */
+       if (it->it_op & IT_CREAT)
+               return LCK_CW;
+       else if (it->it_op & (IT_GETATTR | IT_OPEN | IT_LOOKUP |
+                             IT_LAYOUT))
+               return LCK_CR;
+       else if (it->it_op &  IT_READDIR)
+               return LCK_PR;
        else if (it->it_op &  IT_GETXATTR)
                return LCK_PR;
        else if (it->it_op &  IT_SETXATTR)
                return LCK_PW;
 
-        LASSERTF(0, "Invalid it_op: %d\n", it->it_op);
-        return -EINVAL;
+       LASSERTF(0, "Invalid it_op: %d\n", it->it_op);
+       return -EINVAL;
 }
 
 struct md_op_data {
@@ -1105,11 +978,8 @@ struct md_op_data {
        /* Various operation flags. */
        enum mds_op_bias        op_bias;
 
-       /* Operation type */
-       __u32                   op_opc;
-
        /* Used by readdir */
-       __u64                   op_offset;
+       __u64                   op_hash_offset;
 
        /* Used by readdir */
        __u32                   op_npages;
@@ -1123,9 +993,13 @@ struct md_op_data {
        struct lustre_handle    op_lease_handle;
 };
 
-enum op_cli_flags {
-       CLI_SET_MEA     = 1 << 0,
-       CLI_RM_ENTRY    = 1 << 1,
+#define op_stripe_offset       op_ioepoch
+#define op_max_pages           op_valid
+
+struct md_callback {
+       int (*md_blocking_ast)(struct ldlm_lock *lock,
+                              struct ldlm_lock_desc *desc,
+                              void *data, int flag);
 };
 
 struct md_enqueue_info;
@@ -1187,9 +1061,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
@@ -1203,10 +1077,6 @@ struct obd_ops {
                         struct lov_stripe_md *mem_src);
         int (*o_unpackmd)(struct obd_export *exp,struct lov_stripe_md **mem_tgt,
                           struct lov_mds_md *disk_src, int disk_len);
-        int (*o_preallocate)(struct lustre_handle *, obd_count *req,
-                             obd_id *ids);
-        /* FIXME: add fid capability support for create & destroy! */
-        int (*o_precreate)(struct obd_export *exp);
         int (*o_create)(const struct lu_env *env, struct obd_export *exp,
                         struct obdo *oa, struct lov_stripe_md **ea,
                         struct obd_trans_info *oti);
@@ -1226,28 +1096,6 @@ struct obd_ops {
                          struct obd_info *oinfo);
         int (*o_getattr_async)(struct obd_export *exp, struct obd_info *oinfo,
                                struct ptlrpc_request_set *set);
-        int (*o_brw)(int rw, struct obd_export *exp, struct obd_info *oinfo,
-                     obd_count oa_bufs, struct brw_page *pgarr,
-                     struct obd_trans_info *oti);
-        int (*o_merge_lvb)(struct obd_export *exp, struct lov_stripe_md *lsm,
-                           struct ost_lvb *lvb, int kms_only);
-        int (*o_adjust_kms)(struct obd_export *exp, struct lov_stripe_md *lsm,
-                            obd_off size, int shrink);
-        int (*o_punch)(const struct lu_env *, struct obd_export *exp,
-                       struct obd_info *oinfo, struct obd_trans_info *oti,
-                       struct ptlrpc_request_set *rqset);
-        int (*o_sync)(const struct lu_env *env, struct obd_export *exp,
-                      struct obd_info *oinfo, obd_size start, obd_size end,
-                      struct ptlrpc_request_set *set);
-        int (*o_migrate)(struct lustre_handle *conn, struct lov_stripe_md *dst,
-                         struct lov_stripe_md *src, obd_size start,
-                         obd_size end, struct obd_trans_info *oti);
-        int (*o_copy)(struct lustre_handle *dstconn, struct lov_stripe_md *dst,
-                      struct lustre_handle *srconn, struct lov_stripe_md *src,
-                      obd_size start, obd_size end, struct obd_trans_info *);
-        int (*o_iterate)(struct lustre_handle *conn,
-                         int (*)(obd_id, obd_seq, void *),
-                         obd_id *startid, obd_seq seq, void *data);
         int (*o_preprw)(const struct lu_env *env, int cmd,
                         struct obd_export *exp, struct obdo *oa, int objcount,
                         struct obd_ioobj *obj, struct niobuf_remote *remote,
@@ -1259,21 +1107,12 @@ struct obd_ops {
                           struct niobuf_remote *remote, int pages,
                           struct niobuf_local *local,
                           struct obd_trans_info *oti, int rc);
-        int (*o_enqueue)(struct obd_export *, struct obd_info *oinfo,
-                         struct ldlm_enqueue_info *einfo,
-                         struct ptlrpc_request_set *rqset);
         int (*o_change_cbdata)(struct obd_export *, struct lov_stripe_md *,
                                ldlm_iterator_t it, void *data);
         int (*o_find_cbdata)(struct obd_export *, struct lov_stripe_md *,
                              ldlm_iterator_t it, void *data);
-        int (*o_cancel)(struct obd_export *, struct lov_stripe_md *md,
-                        __u32 mode, struct lustre_handle *);
-        int (*o_cancel_unused)(struct obd_export *, struct lov_stripe_md *,
-                               ldlm_cancel_flags_t flags, void *opaque);
         int (*o_init_export)(struct obd_export *exp);
         int (*o_destroy_export)(struct obd_export *exp);
-        int (*o_extent_calc)(struct obd_export *, struct lov_stripe_md *,
-                             int cmd, obd_off *);
 
         /* llog related obd_methods */
         int (*o_llog_init)(struct obd_device *obd, struct obd_llog_group *grp,
@@ -1318,44 +1157,30 @@ struct obd_ops {
          * Also, add a wrapper function in include/linux/obd_class.h. */
 };
 
-enum {
-        LUSTRE_OPC_MKDIR    = (1 << 0),
-        LUSTRE_OPC_SYMLINK  = (1 << 1),
-        LUSTRE_OPC_MKNOD    = (1 << 2),
-        LUSTRE_OPC_CREATE   = (1 << 3),
-        LUSTRE_OPC_ANY      = (1 << 4)
-};
-
 /* lmv structures */
-#define MEA_MAGIC_LAST_CHAR      0xb2221ca1
-#define MEA_MAGIC_ALL_CHARS      0xb222a11c
-#define MEA_MAGIC_HASH_SEGMENT   0xb222a11b
-
-#define MAX_HASH_SIZE_32         0x7fffffffUL
-#define MAX_HASH_SIZE            0x7fffffffffffffffULL
-#define MAX_HASH_HIGHEST_BIT     0x1000000000000000ULL
-
 struct lustre_md {
-        struct mdt_body         *body;
-        struct lov_stripe_md    *lsm;
-        struct lmv_stripe_md    *mea;
+       struct mdt_body         *body;
+       struct lov_stripe_md    *lsm;
+       struct lmv_stripe_md    *lmv;
 #ifdef CONFIG_FS_POSIX_ACL
-        struct posix_acl        *posix_acl;
+       struct posix_acl        *posix_acl;
 #endif
-        struct mdt_remote_perm  *remote_perm;
-        struct obd_capa         *mds_capa;
-        struct obd_capa         *oss_capa;
+       struct mdt_remote_perm  *remote_perm;
+       struct obd_capa         *mds_capa;
+       struct obd_capa         *oss_capa;
+       __u64                   lm_flags;
 };
 
 struct md_open_data {
        struct obd_client_handle        *mod_och;
        struct ptlrpc_request           *mod_open_req;
        struct ptlrpc_request           *mod_close_req;
-       cfs_atomic_t                     mod_refcount;
+       atomic_t                         mod_refcount;
        bool                             mod_is_create;
 };
 
 struct lookup_intent;
+struct cl_attr;
 
 struct md_ops {
        /* Every operation from MD_STATS_FIRST_OP up to and including
@@ -1407,6 +1232,10 @@ struct md_ops {
        int (*m_readpage)(struct obd_export *, struct md_op_data *,
                          struct page **, struct ptlrpc_request **);
 
+       int (*m_read_entry)(struct obd_export *, struct md_op_data *,
+                           struct md_callback *cb_op, struct lu_dirent **ld,
+                           struct page **ppage);
+
        int (*m_unlink)(struct obd_export *, struct md_op_data *,
                        struct ptlrpc_request **);
 
@@ -1446,7 +1275,7 @@ struct md_ops {
                           const struct lu_fid *,
                           struct ptlrpc_request **);
 
-       int (*m_init_ea_size)(struct obd_export *, int, int, int);
+       int (*m_init_ea_size)(struct obd_export *, int, int, int, int);
 
        int (*m_get_lustre_md)(struct obd_export *, struct ptlrpc_request *,
                               struct obd_export *, struct obd_export *,
@@ -1454,6 +1283,13 @@ struct md_ops {
 
        int (*m_free_lustre_md)(struct obd_export *, struct lustre_md *);
 
+       int (*m_merge_attr)(struct obd_export *,
+                           const struct lmv_stripe_md *lsm,
+                           struct cl_attr *attr);
+
+       int (*m_update_lsm_md)(struct obd_export *, struct lmv_stripe_md *lsm,
+                              struct mdt_body *, ldlm_blocking_callback);
+
        int (*m_set_open_replay_data)(struct obd_export *,
                                      struct obd_client_handle *,
                                      struct lookup_intent *);
@@ -1523,18 +1359,18 @@ static inline struct lustre_capa *oinfo_capa(struct obd_info *oinfo)
 
 static inline struct md_open_data *obd_mod_alloc(void)
 {
-        struct md_open_data *mod;
-        OBD_ALLOC_PTR(mod);
-        if (mod == NULL)
-                return NULL;
-        cfs_atomic_set(&mod->mod_refcount, 1);
-        return mod;
+       struct md_open_data *mod;
+       OBD_ALLOC_PTR(mod);
+       if (mod == NULL)
+               return NULL;
+       atomic_set(&mod->mod_refcount, 1);
+       return mod;
 }
 
-#define obd_mod_get(mod) cfs_atomic_inc(&(mod)->mod_refcount)
+#define obd_mod_get(mod) atomic_inc(&(mod)->mod_refcount)
 #define obd_mod_put(mod)                                          \
 ({                                                                \
-       if (cfs_atomic_dec_and_test(&(mod)->mod_refcount)) {      \
+       if (atomic_dec_and_test(&(mod)->mod_refcount)) {          \
                if ((mod)->mod_open_req)                          \
                        ptlrpc_req_finished((mod)->mod_open_req); \
                OBD_FREE_PTR(mod);                                \
@@ -1547,8 +1383,8 @@ void obdo_set_parent_fid(struct obdo *dst, const struct lu_fid *parent);
 /* return 1 if client should be resend request */
 static inline int client_should_resend(int resend, struct client_obd *cli)
 {
-        return cfs_atomic_read(&cli->cl_resends) ?
-               cfs_atomic_read(&cli->cl_resends) > resend : 1;
+       return atomic_read(&cli->cl_resends) ?
+              atomic_read(&cli->cl_resends) > resend : 1;
 }
 
 /**
@@ -1588,7 +1424,7 @@ static inline bool filename_is_volatile(const char *name, int namelen, int *idx)
        }
        /* we have an idx, read it */
        start = name + LUSTRE_VOLATILE_HDR_LEN + 1;
-       *idx = strtoul(start, &end, 0);
+       *idx = strtoul(start, &end, 16);
        /* error cases:
         * no digit, no trailing :, negative value
         */