Whamcloud - gitweb
LU-5061 obd: add lnb_ prefix to members of struct niobuf_local
[fs/lustre-release.git] / lustre / include / obd.h
index 3abcc4d..2046f69 100644 (file)
@@ -163,8 +163,6 @@ struct obd_info {
            - while setattr, the flags used for distinguish punch operation
          */
        __u64                   oi_flags;
-        /* Lock handle specific for every OSC lock. */
-        struct lustre_handle   *oi_lockh;
         /* lsm data specific for every OSC. */
         struct lov_stripe_md   *oi_md;
         /* obdo data specific for every OSC, if needed at all. */
@@ -179,8 +177,6 @@ struct obd_info {
         /* oss capability, its type is obd_capa in client to avoid copy.
          * in contrary its type is lustre_capa in OSS. */
         void                   *oi_capa;
-       /* transfer jobid from ost_sync() to filter_sync()... */
-       char                   *oi_jobid;
 };
 
 struct obd_type {
@@ -203,27 +199,6 @@ struct brw_page {
        obd_flag flag;
 };
 
-/* llog contexts */
-enum llog_ctxt_id {
-       LLOG_CONFIG_ORIG_CTXT  =  0,
-       LLOG_CONFIG_REPL_CTXT,
-       LLOG_MDS_OST_ORIG_CTXT,
-       LLOG_MDS_OST_REPL_CTXT,
-       LLOG_SIZE_ORIG_CTXT,
-       LLOG_SIZE_REPL_CTXT,
-       LLOG_RD1_ORIG_CTXT,
-       LLOG_RD1_REPL_CTXT,
-       LLOG_TEST_ORIG_CTXT,
-       LLOG_TEST_REPL_CTXT,
-       LLOG_LOVEA_ORIG_CTXT,
-       LLOG_LOVEA_REPL_CTXT,
-       LLOG_CHANGELOG_ORIG_CTXT,       /**< changelog generation on mdd */
-       LLOG_CHANGELOG_REPL_CTXT,       /**< changelog access on clients */
-       LLOG_CHANGELOG_USER_ORIG_CTXT,  /**< for multiple changelog consumers */
-       LLOG_AGENT_ORIG_CTXT,           /**< agent requests generation on cdt */
-       LLOG_MAX_CTXTS
-};
-
 struct timeout_item {
         enum timeout_event ti_event;
         cfs_time_t         ti_timeout;
@@ -266,12 +241,12 @@ struct client_obd {
         enum lustre_sec_part     cl_sp_to;
         struct sptlrpc_flavor    cl_flvr_mgc;   /* fixed flavor of mgc->mgs */
 
-        /* the grant values are protected by loi_list_lock below */
-        long                     cl_dirty;         /* all _dirty_ in bytes */
-        long                     cl_dirty_max;     /* 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) */
+       /* 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) */
 
        /* 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
@@ -286,7 +261,6 @@ struct client_obd {
        /* 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_chunk;
        int                  cl_extent_tax; /* extent overhead, by bytes */
 
        /* keep track of objects that have lois that contain pages which
@@ -490,12 +464,11 @@ struct lmv_obd {
 struct niobuf_local {
        __u64           lnb_file_offset;
        __u32           lnb_page_offset;
-       __u32           len;
-       __u32           flags;
-       struct page     *page;
-       struct dentry   *dentry;
-       int             lnb_grant_used;
-       int             rc;
+       __u32           lnb_len;
+       __u32           lnb_flags;
+       struct page     *lnb_page;
+       void            *lnb_data;
+       int             lnb_rc;
 };
 
 #define LUSTRE_FLD_NAME         "fld"
@@ -533,119 +506,21 @@ struct niobuf_local {
 #define LUSTRE_MGS_OBDNAME "MGS"
 #define LUSTRE_MGC_OBDNAME "MGC"
 
-static inline int is_osp_on_mdt(char *name)
-{
-       char   *ptr;
-
-       ptr = strrchr(name, '-');
-       if (ptr == NULL) {
-               CERROR("%s is not a obdname\n", name);
-               return 0;
-       }
-
-       /* 1.8 OSC/OSP name on MDT is fsname-OSTxxxx-osc */
-       if (strncmp(ptr + 1, "osc", 3) == 0)
-               return 1;
-
-       if (strncmp(ptr + 1, "MDT", 3) != 0)
-               return 0;
-
-       while (*(--ptr) != '-' && ptr != name);
-
-       if (ptr == name)
-               return 0;
-
-       if (strncmp(ptr + 1, LUSTRE_OSP_NAME, strlen(LUSTRE_OSP_NAME)) != 0 &&
-           strncmp(ptr + 1, LUSTRE_OSC_NAME, strlen(LUSTRE_OSC_NAME)) != 0)
-               return 0;
-
-       return 1;
-}
-
-/* Don't conflict with on-wire flags OBD_BRW_WRITE, etc */
-#define N_LOCAL_TEMP_PAGE 0x10000000
-
 struct obd_trans_info {
-        __u64                    oti_transno;
-        __u64                    oti_xid;
-        /* Only used on the server side for tracking acks. */
-        struct oti_req_ack_lock {
-                struct lustre_handle lock;
-                __u32                mode;
-        }                        oti_ack_locks[4];
-        void                    *oti_handle;
-        struct llog_cookie       oti_onecookie;
-        struct llog_cookie      *oti_logcookies;
-        int                      oti_numcookies;
-       /** synchronous write is needed */
-       unsigned long            oti_sync_write:1;
-
-        /* initial thread handling transaction */
-        struct ptlrpc_thread *   oti_thread;
-        __u32                    oti_conn_cnt;
-        /** VBR: versions */
-        __u64                    oti_pre_version;
-       /** JobID */
-       char                    *oti_jobid;
-
-        struct obd_uuid         *oti_ost_uuid;
+       __u64                    oti_xid;
+       /* Only used on the server side for tracking acks. */
+       struct oti_req_ack_lock {
+               struct lustre_handle    lock;
+               __u32                   mode;
+       }                        oti_ack_locks[4];
+       void                    *oti_handle;
+       struct llog_cookie       oti_onecookie;
+       struct llog_cookie      *oti_logcookies;
+
+       /** VBR: versions */
+       __u64                    oti_pre_version;
 };
 
-static inline void oti_init(struct obd_trans_info *oti,
-                            struct ptlrpc_request *req)
-{
-        if (oti == NULL)
-                return;
-        memset(oti, 0, sizeof(*oti));
-
-        if (req == NULL)
-                return;
-
-        oti->oti_xid = req->rq_xid;
-        /** VBR: take versions from request */
-        if (req->rq_reqmsg != NULL &&
-            lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) {
-                __u64 *pre_version = lustre_msg_get_versions(req->rq_reqmsg);
-                oti->oti_pre_version = pre_version ? pre_version[0] : 0;
-                oti->oti_transno = lustre_msg_get_transno(req->rq_reqmsg);
-        }
-
-        /** called from mds_create_objects */
-        if (req->rq_repmsg != NULL)
-                oti->oti_transno = lustre_msg_get_transno(req->rq_repmsg);
-        oti->oti_thread = req->rq_svc_thread;
-        if (req->rq_reqmsg != NULL)
-                oti->oti_conn_cnt = lustre_msg_get_conn_cnt(req->rq_reqmsg);
-}
-
-static inline void oti_alloc_cookies(struct obd_trans_info *oti,int num_cookies)
-{
-        if (!oti)
-                return;
-
-        if (num_cookies == 1)
-                oti->oti_logcookies = &oti->oti_onecookie;
-        else
-                OBD_ALLOC_LARGE(oti->oti_logcookies,
-                                num_cookies * sizeof(oti->oti_onecookie));
-
-        oti->oti_numcookies = num_cookies;
-}
-
-static inline void oti_free_cookies(struct obd_trans_info *oti)
-{
-        if (!oti || !oti->oti_logcookies)
-                return;
-
-        if (oti->oti_logcookies == &oti->oti_onecookie)
-                LASSERT(oti->oti_numcookies == 1);
-        else
-                OBD_FREE_LARGE(oti->oti_logcookies,
-                               oti->oti_numcookies*sizeof(oti->oti_onecookie));
-        oti->oti_logcookies = NULL;
-        oti->oti_numcookies = 0;
-}
-
 /*
  * Events signalled through obd_notify() upcall-chain.
  */
@@ -698,7 +573,6 @@ struct target_recovery_data {
 };
 
 struct obd_llog_group {
-       int                olg_seq;
        struct llog_ctxt   *olg_ctxts[LLOG_MAX_CTXTS];
        wait_queue_head_t  olg_waitq;
        spinlock_t         olg_lock;
@@ -733,7 +607,6 @@ struct obd_device {
                obd_starting:1,         /* started setup */
                obd_force:1,            /* cleanup with > 0 obd refcount */
                obd_fail:1,             /* cleanup with failover */
-               obd_async_recov:1,      /* allow asynchronous orphan cleanup */
                obd_no_conn:1,          /* deny new connections */
                obd_inactive:1,         /* device active/inactive
                                         * (for /proc/status only!!) */
@@ -781,7 +654,6 @@ struct obd_device {
        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;
@@ -851,9 +723,6 @@ struct obd_device {
        int                    obd_conn_inprogress;
 };
 
-#define OBD_LLOG_FL_SENDNOW     0x0001
-#define OBD_LLOG_FL_EXIT       0x0002
-
 enum obd_cleanup_stage {
 /* Special case hack for MDS LOVs */
         OBD_CLEANUP_EARLY,
@@ -863,8 +732,6 @@ enum obd_cleanup_stage {
 
 /* get/set_info keys */
 #define KEY_ASYNC               "async"
-#define KEY_BLOCKSIZE_BITS      "blocksize_bits"
-#define KEY_BLOCKSIZE           "blocksize"
 #define KEY_CAPA_KEY            "capa_key"
 #define KEY_CHANGELOG_CLEAR     "changelog_clear"
 #define KEY_FID2PATH            "fid2path"
@@ -877,13 +744,11 @@ enum obd_cleanup_stage {
 #define KEY_GRANT_SHRINK        "grant_shrink"
 #define KEY_HSM_COPYTOOL_SEND   "hsm_send"
 #define KEY_INIT_RECOV_BACKUP   "init_recov_bk"
-#define KEY_INIT_RECOV          "initial_recov"
 #define KEY_INTERMDS            "inter_mds"
 #define KEY_LAST_ID             "last_id"
 #define KEY_LAST_FID           "last_fid"
 #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_DEFAULT_EASIZE     "default_easize"
 #define KEY_MAX_COOKIESIZE     "max_cookiesize"
@@ -898,11 +763,9 @@ enum obd_cleanup_stage {
 /*      KEY_SET_INFO in lustre_idl.h */
 #define KEY_SPTLRPC_CONF        "sptlrpc_conf"
 #define KEY_CONNECT_FLAG        "connect_flags"
-#define KEY_SYNC_LOCK_CANCEL    "sync_lock_cancel"
 
 #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;
@@ -964,9 +827,6 @@ struct md_op_data {
 
         /* iattr fields and blocks. */
         struct iattr            op_attr;
-#ifdef __KERNEL__
-       unsigned int            op_attr_flags;
-#endif
        __u64                   op_valid;
        loff_t                  op_attr_blocks;
 
@@ -982,9 +842,6 @@ struct md_op_data {
        enum mds_op_bias        op_bias;
 
        /* Used by readdir */
-       __u64                   op_hash_offset;
-
-       /* Used by readdir */
        __u32                   op_npages;
 
        /* used to transfer info between the stacks of MD client
@@ -1032,8 +889,6 @@ struct obd_ops {
                                 __u32 keylen, void *key,
                                 __u32 vallen, void *val,
                                 struct ptlrpc_request_set *set);
-        int (*o_attach)(struct obd_device *dev, obd_count len, void *data);
-        int (*o_detach)(struct obd_device *dev);
         int (*o_setup) (struct obd_device *dev, struct lustre_cfg *cfg);
         int (*o_precleanup)(struct obd_device *dev,
                             enum obd_cleanup_stage cleanup_stage);
@@ -1083,9 +938,6 @@ struct obd_ops {
         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);
-        int (*o_create_async)(struct obd_export *exp,  struct obd_info *oinfo,
-                              struct lov_stripe_md **ea,
-                              struct obd_trans_info *oti);
         int (*o_destroy)(const struct lu_env *env, struct obd_export *exp,
                          struct obdo *oa, struct lov_stripe_md *ea,
                          struct obd_trans_info *oti, struct obd_export *md_exp,
@@ -1121,12 +973,6 @@ struct obd_ops {
         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_llog_connect)(struct obd_export *, struct llogd_conn_body *);
-
-        /* metadata-only methods */
-        int (*o_pin)(struct obd_export *, const struct lu_fid *fid,
-                     struct obd_capa *, struct obd_client_handle *, int flag);
-        int (*o_unpin)(struct obd_export *, struct obd_client_handle *, int);
 
         int (*o_import_event)(struct obd_device *, struct obd_import *,
                               enum obd_import_event);
@@ -1171,7 +1017,6 @@ struct lustre_md {
        struct mdt_remote_perm  *remote_perm;
        struct obd_capa         *mds_capa;
        struct obd_capa         *oss_capa;
-       __u64                   lm_flags;
 };
 
 struct md_open_data {
@@ -1232,12 +1077,9 @@ struct md_ops {
        int (*m_fsync)(struct obd_export *, const struct lu_fid *,
                       struct obd_capa *, struct ptlrpc_request **);
 
-       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_read_page)(struct obd_export *, struct md_op_data *,
+                          struct md_callback *cb_op, __u64 hash_offset,
+                          struct page **ppage);
 
        int (*m_unlink)(struct obd_export *, struct md_op_data *,
                        struct ptlrpc_request **);
@@ -1258,6 +1100,7 @@ struct md_ops {
 
         int (*m_revalidate_lock)(struct obd_export *, struct lookup_intent *,
                                  struct lu_fid *, __u64 *bits);
+
 #define MD_STATS_LAST_OP m_revalidate_lock
 
        int (*m_getstatus)(struct obd_export *, struct lu_fid *,
@@ -1274,10 +1117,6 @@ struct md_ops {
        int (*m_getattr_name)(struct obd_export *, struct md_op_data *,
                              struct ptlrpc_request **);
 
-       int (*m_is_subdir)(struct obd_export *, const struct lu_fid *,
-                          const struct lu_fid *,
-                          struct ptlrpc_request **);
-
        int (*m_init_ea_size)(struct obd_export *, int, int, int, int);
 
        int (*m_get_lustre_md)(struct obd_export *, struct ptlrpc_request *,
@@ -1320,6 +1159,11 @@ struct md_ops {
        int (*m_get_remote_perm)(struct obd_export *, const struct lu_fid *,
                                 struct obd_capa *, __u32,
                                 struct ptlrpc_request **);
+
+       int (*m_get_fid_from_lsm)(struct obd_export *,
+                                 const struct lmv_stripe_md *,
+                                 const char *name, int namelen,
+                                 struct lu_fid *fid);
 };
 
 struct lsm_operations {
@@ -1351,15 +1195,6 @@ static inline const struct lsm_operations *lsm_op_find(int magic)
         }
 }
 
-/* Requests for obd_extent_calc() */
-#define OBD_CALC_STRIPE_START   1
-#define OBD_CALC_STRIPE_END     2
-
-static inline struct lustre_capa *oinfo_capa(struct obd_info *oinfo)
-{
-        return oinfo->oi_capa;
-}
-
 static inline struct md_open_data *obd_mod_alloc(void)
 {
        struct md_open_data *mod;
@@ -1450,16 +1285,27 @@ static inline int cli_brw_size(struct obd_device *obd)
        return obd->u.cli.cl_max_pages_per_rpc << PAGE_CACHE_SHIFT;
 }
 
+/* when RPC size or the max RPCs in flight is increased, the max dirty pages
+ * of the client should be increased accordingly to avoid sending fragmented
+ * RPCs over the network when the client runs out of the maximum dirty space
+ * when so many RPCs are being generated.
+ */
 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);
+       if (cli->cl_dirty_max_pages <= 0)
+               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;
+
+               if (dirty_max > cli->cl_dirty_max_pages)
+                       cli->cl_dirty_max_pages = dirty_max;
+       }
+
+       if (cli->cl_dirty_max_pages > totalram_pages / 8)
+               cli->cl_dirty_max_pages = totalram_pages / 8;
 }
 
 #endif /* __OBD_H */