Whamcloud - gitweb
LU-7674 lmv: remove unused placement parameter
[fs/lustre-release.git] / lustre / include / obd.h
index ca71e04..4231d02 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2014, Intel Corporation.
+ * Copyright (c) 2011, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -53,6 +53,7 @@
 #include <lustre_handles.h>
 #include <lustre_intent.h>
 #include <lvfs.h>
+#include <lustre_quota.h>
 
 #define MAX_OBD_DEVICES 8192
 
@@ -154,6 +155,12 @@ enum {
  */
 #define OBD_MAX_DEFAULT_EA_SIZE                4096
 
+enum obd_cl_sem_lock_class {
+       OBD_CLI_SEM_NORMAL,
+       OBD_CLI_SEM_MGC,
+       OBD_CLI_SEM_MDCOSC,
+};
+
 struct mdc_rpc_lock;
 struct obd_import;
 struct client_obd {
@@ -192,6 +199,8 @@ struct client_obd {
        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) */
+       /* grant consumed for dirty pages */
+       unsigned long            cl_dirty_grant;
 
        /* 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
@@ -206,7 +215,11 @@ 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;
-       unsigned int            cl_extent_tax;  /* extent overhead, by bytes */
+       /* extent insertion metadata overhead to be accounted in grant,
+        * in bytes */
+       unsigned int            cl_grant_extent_tax;
+       /* maximum extent size, in number of pages */
+       unsigned int            cl_max_extent_pages;
 
        /* keep track of objects that have lois that contain pages which
         * have been queued for async brw.  this lock also protects the
@@ -276,6 +289,8 @@ struct client_obd {
         * An unstable page is a page state that WRITE RPC has finished but
         * the transaction has NOT yet committed. */
        atomic_long_t            cl_unstable_count;
+       /** Link to osc_shrinker_list */
+       struct list_head         cl_shrink_list;
 
        /* number of in flight destroy rpcs is limited to max_rpcs_in_flight */
        atomic_t                 cl_destroy_in_flight;
@@ -319,7 +334,7 @@ struct client_obd {
        void                    *cl_writeback_work;
        void                    *cl_lru_work;
        /* hash tables for osc_quota_info */
-       struct cfs_hash         *cl_quota_hash[MAXQUOTAS];
+       struct cfs_hash         *cl_quota_hash[LL_MAXQUOTAS];
 };
 #define obd2cli_tgt(obd) ((char *)(obd)->u.cli.cl_target_uuid.uuid)
 
@@ -392,20 +407,10 @@ struct lmv_tgt_desc {
        unsigned long           ltd_active:1; /* target up for requests */
 };
 
-enum placement_policy {
-        PLACEMENT_CHAR_POLICY   = 0,
-        PLACEMENT_NID_POLICY    = 1,
-        PLACEMENT_INVAL_POLICY  = 2,
-        PLACEMENT_MAX_POLICY
-};
-
-typedef enum placement_policy placement_policy_t;
-
 struct lmv_obd {
        int                     refcount;
        struct lu_client_fld    lmv_fld;
        spinlock_t              lmv_lock;
-       placement_policy_t      lmv_placement;
        struct lmv_desc         desc;
        struct obd_uuid         cluuid;
        struct obd_export       *exp;
@@ -427,9 +432,9 @@ struct niobuf_local {
        __u32           lnb_page_offset;
        __u32           lnb_len;
        __u32           lnb_flags;
+       int             lnb_rc;
        struct page     *lnb_page;
        void            *lnb_data;
-       int             lnb_rc;
 };
 
 #define LUSTRE_FLD_NAME         "fld"
@@ -581,14 +586,14 @@ struct obd_llog_group {
 #define OBD_DEVICE_MAGIC        0XAB5CD6EF
 
 struct obd_device {
-       struct obd_type         *obd_type;
-       __u32                    obd_magic;
+       struct obd_type                 *obd_type;
+       __u32                            obd_magic; /* OBD_DEVICE_MAGIC */
+       int                              obd_minor; /* device number: lctl dl */
+       struct lu_device                *obd_lu_dev;
 
-        /* common and UUID name of this device */
-       char                     obd_name[MAX_OBD_NAME];
-       struct obd_uuid          obd_uuid;
-       int                      obd_minor;
-       struct lu_device        *obd_lu_dev;
+       /* common and UUID name of this device */
+       struct obd_uuid                  obd_uuid;
+       char                             obd_name[MAX_OBD_NAME];
 
        /* bitfield modification is protected by obd_dev_lock */
        unsigned long
@@ -597,8 +602,7 @@ struct obd_device {
                obd_recovering:1,       /* there are recoverable clients */
                obd_abort_recovery:1,   /* recovery expired */
                obd_version_recov:1,    /* obd uses version checking */
-               obd_replayable:1,       /* recovery is enabled;
-                                        * inform clients */
+               obd_replayable:1,       /* recovery enabled; inform clients */
                obd_no_transno:1,       /* no committed-transno notification */
                obd_no_recov:1,         /* fail instead of retry messages */
                obd_stopping:1,         /* started cleanup */
@@ -610,8 +614,7 @@ 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_force_abort_recovery:1; /* abort recovery forcely */
+               obd_uses_nid_stats:1;   /* maintain per-client OBD stats */
 
         /* use separate field as it is set in interrupt to don't mess with
          * protection of other bits using _bh lock */
@@ -625,22 +628,22 @@ struct obd_device {
        /* client_generation-export hash body */
        struct cfs_hash             *obd_gen_hash;
        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;
+       atomic_t                obd_refcount;
        int                     obd_num_exports;
        spinlock_t              obd_nid_lock;
        struct ldlm_namespace  *obd_namespace;
        struct ptlrpc_client    obd_ldlm_client; /* XXX OST/MDS only */
        /* a spinlock is OK for what we do now, may need a semaphore later */
        spinlock_t              obd_dev_lock; /* protect OBD bitfield above */
-       struct mutex            obd_dev_mutex;
-       __u64                   obd_last_committed;
        spinlock_t              obd_osfs_lock;
        struct obd_statfs       obd_osfs;       /* locked by obd_osfs_lock */
        __u64                   obd_osfs_age;
+       __u64                   obd_last_committed;
+       struct mutex            obd_dev_mutex;
        struct lvfs_run_ctxt    obd_lvfs_ctxt;
        struct obd_llog_group   obd_olg;        /* default llog group */
        struct obd_device       *obd_observer;
@@ -673,10 +676,11 @@ struct obd_device {
        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;
+
        /* all lists are protected by obd_recovery_task_lock */
        struct list_head                obd_req_replay_queue;
        struct list_head                obd_lock_replay_queue;
@@ -694,12 +698,13 @@ struct obd_device {
                struct lov_obd lov;
                struct lmv_obd lmv;
        } u;
+
        /* Fields used by LProcFS */
-       unsigned int           obd_cntr_base;
-       struct lprocfs_stats  *obd_stats;
+       struct lprocfs_stats            *obd_stats;
+       unsigned int                    obd_cntr_base;
 
-       unsigned int           obd_md_cntr_base;
-       struct lprocfs_stats  *obd_md_stats;
+       unsigned int                     obd_md_cntr_base;
+       struct lprocfs_stats            *obd_md_stats;
 
        struct proc_dir_entry   *obd_proc_entry;
        struct proc_dir_entry   *obd_proc_exports_entry;
@@ -710,20 +715,18 @@ struct obd_device {
        wait_queue_head_t       obd_evict_inprogress_waitq;
        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;
+       /**
+        * LDLM pool part. Save last calculated SLV and Limit.
+        */
+       rwlock_t                        obd_pool_lock;
+       __u64                           obd_pool_slv;
+       int                             obd_pool_limit;
 
-        /**
-         * A list of outstanding class_incref()'s against this obd. For
-         * debugging.
-         */
-        struct lu_ref          obd_reference;
+       int                             obd_conn_inprogress;
 
-       int                    obd_conn_inprogress;
+       /**
+        * List of outstanding class_incref()'s fo this OBD. For debugging. */
+       struct lu_ref                   obd_reference;
 };
 
 /* get/set_info keys */
@@ -758,22 +761,6 @@ struct obd_device {
 
 struct lu_context;
 
-/* /!\ must be coherent with include/linux/namei.h on patched kernel */
-#define IT_OPEN     (1 << 0)
-#define IT_CREAT    (1 << 1)
-#define IT_READDIR  (1 << 2)
-#define IT_GETATTR  (1 << 3)
-#define IT_LOOKUP   (1 << 4)
-#define IT_UNLINK   (1 << 5)
-#define IT_TRUNC    (1 << 6)
-#define IT_GETXATTR (1 << 7)
-#define IT_EXEC     (1 << 8)
-#define IT_PIN      (1 << 9)
-#define IT_LAYOUT   (1 << 10)
-#define IT_QUOTA_DQACQ (1 << 11)
-#define IT_QUOTA_CONN  (1 << 12)
-#define IT_SETXATTR (1 << 13)
-
 static inline int it_to_lock_mode(struct lookup_intent *it)
 {
        /* CREAT needs to be tested before open (both could be set) */
@@ -985,7 +972,6 @@ struct lustre_md {
 #ifdef CONFIG_FS_POSIX_ACL
        struct posix_acl        *posix_acl;
 #endif
-       struct mdt_remote_perm  *remote_perm;
 };
 
 struct md_open_data {
@@ -1079,12 +1065,9 @@ struct md_ops {
 
 #define MD_STATS_LAST_OP m_revalidate_lock
 
-       int (*m_getstatus)(struct obd_export *, struct lu_fid *);
+       int (*m_get_root)(struct obd_export *, const char *, struct lu_fid *);
        int (*m_null_inode)(struct obd_export *, const struct lu_fid *);
 
-       int (*m_find_cbdata)(struct obd_export *, const struct lu_fid *,
-                            ldlm_iterator_t, void *);
-
        int (*m_getattr_name)(struct obd_export *, struct md_op_data *,
                              struct ptlrpc_request **);
 
@@ -1107,7 +1090,8 @@ struct md_ops {
        int (*m_clear_open_replay_data)(struct obd_export *,
                                        struct obd_client_handle *);
 
-       int (*m_set_lock_data)(struct obd_export *, __u64 *, void *, __u64 *);
+       int (*m_set_lock_data)(struct obd_export *,
+                              const struct lustre_handle *, void *, __u64 *);
 
        enum ldlm_mode (*m_lock_match)(struct obd_export *, __u64,
                                       const struct lu_fid *, enum ldlm_type,
@@ -1118,9 +1102,6 @@ struct md_ops {
                               union ldlm_policy_data *, enum ldlm_mode,
                               enum ldlm_cancel_flags flags, void *opaque);
 
-       int (*m_get_remote_perm)(struct obd_export *, const struct lu_fid *,
-                                u32, struct ptlrpc_request **);
-
        int (*m_get_fid_from_lsm)(struct obd_export *,
                                  const struct lmv_stripe_md *,
                                  const char *name, int namelen,