Whamcloud - gitweb
LU-3540 lod: update recovery thread
[fs/lustre-release.git] / lustre / include / obd.h
index 596e0ef..ce5457f 100644 (file)
@@ -84,81 +84,22 @@ 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;
-       pid_t           lsm_lock_owner; /* debugging */
-
-       /* maximum possible file size, might change as OSTs status changes,
-        * e.g. disconnected, deactivated */
-       __u64           lsm_maxbytes;
-       struct ost_id   lsm_oi;
-       __u32           lsm_magic;
-       __u32           lsm_stripe_size;
-       __u32           lsm_pattern; /* RAID0, RAID1, released, ... */
-       __u16           lsm_stripe_count;
-       __u16           lsm_layout_gen;
-       char            lsm_pool_name[LOV_MAXPOOLNAME + 1];
-       struct lov_oinfo        *lsm_oinfo[0];
-};
-
-static inline bool lsm_is_released(struct lov_stripe_md *lsm)
-{
-       return !!(lsm->lsm_pattern & LOV_PATTERN_F_RELEASED);
-}
-
-static inline bool lsm_has_objects(struct lov_stripe_md *lsm)
-{
-       if (lsm == NULL)
-               return false;
-       if (lsm_is_released(lsm))
-               return false;
-       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 lov_stripe_md;
 struct obd_info;
 
 typedef int (*obd_enqueue_update_f)(void *cookie, int rc);
 
 /* obd info for a particular level (lov, osc). */
 struct obd_info {
-        /* Lock policy. It keeps an extent which is specific for a particular
-         * OSC. (e.g. lov_prep_enqueue_set initialises extent of the policy,
-         * and osc_enqueue passes it into ldlm_lock_match & ldlm_cli_enqueue. */
-        ldlm_policy_data_t      oi_policy;
-        /* Flags used for set request specific flags:
-           - while lock handling, the flags obtained on the enqueue
-           request are set here.
-           - while stats, the flags used for control delay/resend.
-           - while setattr, the flags used for distinguish punch operation
-         */
+       /* OBD_STATFS_* flags */
        __u64                   oi_flags;
-        /* lsm data specific for every OSC. */
-        struct lov_stripe_md   *oi_md;
-        /* obdo data specific for every OSC, if needed at all. */
-        struct obdo            *oi_oa;
         /* statfs data specific for every OSC, if needed at all. */
         struct obd_statfs      *oi_osfs;
         /* An update callback which is called to update some data on upper
-         * level. E.g. it is used for update lsm->lsm_oinfo at every recieved
+        * level. E.g. it is used for update lsm->lsm_oinfo at every received
          * request in osc level for enqueue requests. It is also possible to
          * update some caller data from LOV layer if needed. */
         obd_enqueue_update_f    oi_cb_up;
-        /* oss capability, its type is obd_capa in client to avoid copy.
-         * in contrary its type is lustre_capa in OSS. */
-        void                   *oi_capa;
 };
 
 struct obd_type {
@@ -213,7 +154,6 @@ enum {
  * on the MDS.
  */
 #define OBD_MAX_DEFAULT_EA_SIZE                4096
-#define OBD_MAX_DEFAULT_COOKIE_SIZE    4096
 
 struct mdc_rpc_lock;
 struct obd_import;
@@ -223,7 +163,7 @@ struct client_obd {
        struct obd_import       *cl_import; /* ptlrpc connection state */
        size_t                   cl_conn_count;
 
-       /* Cache maximum and default values for easize and cookiesize. This is
+       /* Cache maximum and default values for easize. This is
         * strictly a performance optimization to minimize calls to
         * obd_size_diskmd(). The default values are used to calculate the
         * initial size of a request buffer. The ptlrpc layer will resize the
@@ -243,18 +183,6 @@ struct client_obd {
         * run-time if a larger observed size is advertised by the MDT. */
        __u32                    cl_max_mds_easize;
 
-       /* Default cookie size for llog cookies (see struct llog_cookie). It is
-        * initialized to zero at mount-time, then it tracks the largest
-        * observed cookie size advertised by the MDT, up to a maximum value of
-        * OBD_MAX_DEFAULT_COOKIE_SIZE. Note that llog_cookies are not
-        * used by clients communicating with MDS versions 2.4.0 and later.*/
-       __u32                    cl_default_mds_cookiesize;
-
-       /* Maximum possible cookie size computed at mount-time based on
-        * the number of OSTs in the filesystem. May be increased at
-        * run-time if a larger observed size is advertised by the MDT. */
-       __u32                    cl_max_mds_cookiesize;
-
        enum lustre_sec_part     cl_sp_me;
        enum lustre_sec_part     cl_sp_to;
        struct sptlrpc_flavor    cl_flvr_mgc; /* fixed flavor of mgc->mgs */
@@ -335,6 +263,11 @@ struct client_obd {
         struct mdc_rpc_lock     *cl_rpc_lock;
         struct mdc_rpc_lock     *cl_close_lock;
 
+       /* modify rpcs in flight
+        * currently used for metadata only */
+       spinlock_t               cl_mod_rpcs_lock;
+       __u16                    cl_max_mod_rpcs_in_flight;
+
         /* mgc datastruct */
        struct mutex              cl_mgc_mutex;
        struct local_oid_storage *cl_mgc_los;
@@ -352,13 +285,6 @@ struct client_obd {
         /* also protected by the poorly named _loi_list_lock lock above */
         struct osc_async_rc      cl_ar;
 
-       /* 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, 53, 0)
-#warning "please consider removing quotacheck compatibility code"
-#endif
-
        /* sequence manager */
        struct lu_client_seq    *cl_seq;
 
@@ -464,8 +390,6 @@ struct lmv_obd {
        int                     connected;
        int                     max_easize;
        int                     max_def_easize;
-       int                     max_cookiesize;
-       int                     max_def_cookiesize;
 
        __u32                   tgts_size; /* size of tgts array */
        struct lmv_tgt_desc     **tgts;
@@ -518,21 +442,6 @@ struct niobuf_local {
 #define LUSTRE_MGS_OBDNAME "MGS"
 #define LUSTRE_MGC_OBDNAME "MGC"
 
-struct obd_trans_info {
-       __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;
-};
-
 /*
  * Events signalled through obd_notify() upcall-chain.
  */
@@ -624,7 +533,8 @@ struct obd_device {
                                         * (for /proc/status only!!) */
                obd_no_ir:1,            /* no imperative recovery. */
                obd_process_conf:1,     /* device is processing mgs config */
-               obd_uses_nid_stats:1;   /* maintain per-client OBD stats */
+               obd_uses_nid_stats:1,   /* maintain per-client OBD stats */
+               obd_force_abort_recovery:1; /* abort recovery forcely */
 
         /* use separate field as it is set in interrupt to don't mess with
          * protection of other bits using _bh lock */
@@ -761,11 +671,8 @@ enum obd_cleanup_stage {
 #define KEY_INTERMDS            "inter_mds"
 #define KEY_LAST_ID             "last_id"
 #define KEY_LAST_FID           "last_fid"
-#define KEY_LOVDESC             "lovdesc"
 #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_MGSSEC              "mgssec"
 #define KEY_READ_ONLY           "read-only"
 #define KEY_REGISTER_TARGET     "register_target"
@@ -815,6 +722,14 @@ static inline int it_to_lock_mode(struct lookup_intent *it)
        return -EINVAL;
 }
 
+enum md_op_flags {
+       MF_MDC_CANCEL_FID1      = 1 << 0,
+       MF_MDC_CANCEL_FID2      = 1 << 1,
+       MF_MDC_CANCEL_FID3      = 1 << 2,
+       MF_MDC_CANCEL_FID4      = 1 << 3,
+       MF_GET_MDT_IDX          = 1 << 4,
+};
+
 enum md_cli_flags {
        CLI_SET_MEA     = 1 << 0,
        CLI_RM_ENTRY    = 1 << 1,
@@ -899,9 +814,7 @@ struct obd_ops {
        int (*o_iocontrol)(unsigned int cmd, struct obd_export *exp, int len,
                           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);
+                         __u32 keylen, void *key, __u32 *vallen, void *val);
        int (*o_set_info_async)(const struct lu_env *, struct obd_export *,
                                __u32 keylen, void *key,
                                __u32 vallen, void *val,
@@ -947,32 +860,25 @@ struct obd_ops {
                         struct obd_statfs *osfs, __u64 max_age, __u32 flags);
         int (*o_statfs_async)(struct obd_export *exp, struct obd_info *oinfo,
                               __u64 max_age, struct ptlrpc_request_set *set);
-        int (*o_packmd)(struct obd_export *exp, struct lov_mds_md **disk_tgt,
-                        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_create)(const struct lu_env *env, struct obd_export *exp,
-                       struct obdo *oa, struct obd_trans_info *oti);
+                       struct obdo *oa);
        int (*o_destroy)(const struct lu_env *env, struct obd_export *exp,
-                        struct obdo *oa, struct obd_trans_info *oti);
-        int (*o_setattr)(const struct lu_env *, struct obd_export *exp,
-                         struct obd_info *oinfo, struct obd_trans_info *oti);
-        int (*o_setattr_async)(struct obd_export *exp, struct obd_info *oinfo,
-                               struct obd_trans_info *oti,
-                               struct ptlrpc_request_set *rqset);
-        int (*o_getattr)(const struct lu_env *env, struct obd_export *exp,
-                         struct obd_info *oinfo);
-        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,
-                        int *nr_pages, struct niobuf_local *local,
-                        struct obd_trans_info *oti, struct lustre_capa *capa);
-        int (*o_commitrw)(const struct lu_env *env, int cmd,
-                          struct obd_export *exp, struct obdo *oa,
-                          int objcount, struct obd_ioobj *obj,
-                          struct niobuf_remote *remote, int pages,
-                          struct niobuf_local *local,
-                          struct obd_trans_info *oti, int rc);
+                        struct obdo *oa);
+       int (*o_setattr)(const struct lu_env *, struct obd_export *exp,
+                        struct obdo *oa);
+       int (*o_getattr)(const struct lu_env *env, struct obd_export *exp,
+                        struct obdo *oa);
+       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,
+                       int *nr_pages, struct niobuf_local *local);
+       int (*o_commitrw)(const struct lu_env *env, int cmd,
+                         struct obd_export *exp, struct obdo *oa,
+                         int objcount, struct obd_ioobj *obj,
+                         struct niobuf_remote *remote, int pages,
+                         struct niobuf_local *local, int rc);
         int (*o_init_export)(struct obd_export *exp);
         int (*o_destroy_export)(struct obd_export *exp);
 
@@ -986,8 +892,6 @@ struct obd_ops {
         struct obd_uuid *(*o_get_uuid) (struct obd_export *exp);
 
         /* quota methods */
-        int (*o_quotacheck)(struct obd_device *, struct obd_export *,
-                            struct obd_quotactl *);
         int (*o_quotactl)(struct obd_device *, struct obd_export *,
                           struct obd_quotactl *);
 
@@ -1126,7 +1030,7 @@ struct md_ops {
        int (*m_getattr_name)(struct obd_export *, struct md_op_data *,
                              struct ptlrpc_request **);
 
-       int (*m_init_ea_size)(struct obd_export *, __u32, __u32, __u32, __u32);
+       int (*m_init_ea_size)(struct obd_export *, __u32, __u32);
 
        int (*m_get_lustre_md)(struct obd_export *, struct ptlrpc_request *,
                               struct obd_export *, struct obd_export *,
@@ -1172,33 +1076,6 @@ struct md_ops {
                                  struct lu_fid *fid);
 };
 
-struct lsm_operations {
-       void (*lsm_free)(struct lov_stripe_md *);
-       void (*lsm_stripe_by_index)(struct lov_stripe_md *, int *,
-                                   loff_t *, loff_t *);
-       void (*lsm_stripe_by_offset)(struct lov_stripe_md *, int *,
-                                    loff_t *, loff_t *);
-        int (*lsm_lmm_verify) (struct lov_mds_md *lmm, int lmm_bytes,
-                               __u16 *stripe_count);
-        int (*lsm_unpackmd) (struct lov_obd *lov, struct lov_stripe_md *lsm,
-                             struct lov_mds_md *lmm);
-};
-
-extern const struct lsm_operations lsm_v1_ops;
-extern const struct lsm_operations lsm_v3_ops;
-static inline const struct lsm_operations *lsm_op_find(u32 magic)
-{
-        switch(magic) {
-        case LOV_MAGIC_V1:
-               return &lsm_v1_ops;
-        case LOV_MAGIC_V3:
-               return &lsm_v3_ops;
-        default:
-               CERROR("Cannot recognize lsm_magic %08x\n", magic);
-               return NULL;
-        }
-}
-
 static inline struct md_open_data *obd_mod_alloc(void)
 {
        struct md_open_data *mod;
@@ -1219,7 +1096,7 @@ static inline struct md_open_data *obd_mod_alloc(void)
        }                                                         \
 })
 
-void obdo_from_inode(struct obdo *dst, struct inode *src, u32 valid);
+void obdo_from_inode(struct obdo *dst, struct inode *src, u64 valid);
 void obdo_set_parent_fid(struct obdo *dst, const struct lu_fid *parent);
 
 /* return 1 if client should be resend request */
@@ -1267,7 +1144,7 @@ static inline bool filename_is_volatile(const char *name, size_t namelen,
        }
        /* we have an idx, read it */
        start = name + LUSTRE_VOLATILE_HDR_LEN + 1;
-       *idx = strtoul(start, &end, 16);
+       *idx = simple_strtoul(start, &end, 16);
        /* error cases:
         * no digit, no trailing :, negative value
         */