Whamcloud - gitweb
LU-3677 mdt: Set HSM dirty open-for-write file when evicted.
[fs/lustre-release.git] / lustre / include / obd.h
index 9747623..ce55df9 100644 (file)
 #define IOC_MDC_MAX_NR       50
 
 #include <lustre/lustre_idl.h>
+#include <lustre_lib.h>
+#include <libcfs/bitmap.h>
 #ifdef HAVE_SERVER_SUPPORT
 # include <lu_target.h>
+# include <obd_target.h>
 #endif
 #include <lu_ref.h>
-#include <lustre_lib.h>
 #include <lustre_export.h>
 #include <lustre_fid.h>
 #include <lustre_fld.h>
 #include <lustre_capa.h>
 
-#include <libcfs/bitmap.h>
-
-
 #define MAX_OBD_DEVICES 8192
 
 struct osc_async_rc {
@@ -265,139 +264,25 @@ struct brw_page {
        obd_flag flag;
 };
 
-/* Individual type definitions */
-
-struct ost_server_data;
-
-struct osd_properties {
-        size_t osd_max_ea_size;
-};
-
-#define OBT_MAGIC       0xBDDECEAE
-/* hold common fields for "target" device */
-struct obd_device_target {
-        __u32                     obt_magic;
-        __u32                     obt_instance;
-        struct super_block       *obt_sb;
-        /** last_rcvd file */
-        struct file              *obt_rcvd_filp;
-#ifdef HAVE_SERVER_SUPPORT
-        struct lu_target         *obt_lut;
-#endif
-        __u64                     obt_mount_count;
-       struct rw_semaphore       obt_rwsem;
-        struct vfsmount          *obt_vfsmnt;
-        struct file              *obt_health_check_filp;
-       struct osd_properties     obt_osd_properties;
-       struct obd_job_stats      obt_jobstats;
-};
-
 /* 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_MAX_CTXTS
-};
-
-#define FILTER_SUBDIR_COUNT      32            /* set to zero for no subdirs */
-
-struct filter_subdirs {
-       struct dentry *dentry[FILTER_SUBDIR_COUNT];
-};
-
-
-struct filter_ext {
-        __u64                fe_start;
-        __u64                fe_end;
-};
-
-struct filter_obd {
-       /* NB this field MUST be first */
-       struct obd_device_target fo_obt;
-       const char              *fo_fstype;
-
-       int                     fo_group_count;
-       struct dentry           *fo_dentry_O;
-       struct dentry           **fo_dentry_O_groups;
-       struct filter_subdirs   *fo_dentry_O_sub;
-       struct mutex            fo_init_lock;   /* group initialization lock*/
-       int                     fo_committed_group;
-
-       spinlock_t              fo_objidlock;   /* protect fo_lastobjid */
-
-       unsigned long           fo_destroys_in_progress;
-       struct mutex            fo_create_locks[FILTER_SUBDIR_COUNT];
-
-        cfs_list_t fo_export_list;
-        int                  fo_subdir_count;
-
-        obd_size             fo_tot_dirty;      /* protected by obd_osfs_lock */
-        obd_size             fo_tot_granted;    /* all values in bytes */
-        obd_size             fo_tot_pending;
-        int                  fo_tot_granted_clients;
-
-        obd_size             fo_readcache_max_filesize;
-       spinlock_t              fo_flags_lock;
-        unsigned int         fo_read_cache:1,   /**< enable read-only cache */
-                             fo_writethrough_cache:1,/**< read cache writes */
-                             fo_mds_ost_sync:1, /**< MDS-OST orphan recovery*/
-                             fo_raid_degraded:1;/**< RAID device degraded */
-
-        struct obd_import   *fo_mdc_imp;
-        struct obd_uuid      fo_mdc_uuid;
-        struct lustre_handle fo_mdc_conn;
-        struct file        **fo_last_objid_files;
-        __u64               *fo_last_objids; /* last created objid for groups,
-                                              * protected by fo_objidlock */
-
-       struct mutex            fo_alloc_lock;
-
-        cfs_atomic_t         fo_r_in_flight;
-        cfs_atomic_t         fo_w_in_flight;
-
-       /*
-        * per-filter pool of kiobuf's allocated by filter_common_setup() and
-        * torn down by filter_cleanup().
-        *
-        * This pool contains kiobuf used by
-        * filter_{prep,commit}rw_{read,write}() and is shared by all OST
-        * threads.
-        *
-        * Locking: protected by internal lock of cfs_hash, pool can be
-        * found from this hash table by t_id of ptlrpc_thread.
-        */
-       struct cfs_hash         *fo_iobuf_hash;
-
-        struct brw_stats         fo_filter_stats;
-
-        int                      fo_fmd_max_num; /* per exp filter_mod_data */
-        int                      fo_fmd_max_age; /* jiffies to fmd expiry */
-        unsigned long            fo_syncjournal:1, /* sync journal on writes */
-                                 fo_sync_lock_cancel:2;/* sync on lock cancel */
-
-
-        /* sptlrpc stuff */
-       rwlock_t                fo_sptlrpc_lock;
-        struct sptlrpc_rule_set  fo_sptlrpc_rset;
-
-        /* capability related */
-        unsigned int             fo_fl_oss_capa;
-        cfs_list_t               fo_capa_keys;
-        cfs_hlist_head_t        *fo_capa_hash;
-        int                      fo_sec_level;
+       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 {
@@ -526,8 +411,8 @@ struct client_obd {
 
         /* mgc datastruct */
        struct semaphore         cl_mgc_sem;
-        struct vfsmount         *cl_mgc_vfsmnt;
-        struct dentry           *cl_mgc_configs_dir;
+       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;
 
@@ -565,25 +450,6 @@ struct obd_id_info {
         obd_id  *data;
 };
 
-/* */
-
-struct echo_obd {
-       struct obd_device_target eo_obt;
-       struct obdo             eo_oa;
-       spinlock_t               eo_lock;
-       __u64                    eo_lastino;
-       struct lustre_handle    eo_nl_lock;
-       cfs_atomic_t            eo_prep;
-};
-
-struct ost_obd {
-       struct ptlrpc_service   *ost_service;
-       struct ptlrpc_service   *ost_create_service;
-       struct ptlrpc_service   *ost_io_service;
-       struct ptlrpc_service   *ost_seq_service;
-       struct mutex            ost_health_mutex;
-};
-
 struct echo_client_obd {
        struct obd_export       *ec_exp;   /* the local connection to osc/lov */
        spinlock_t              ec_lock;
@@ -1071,19 +937,21 @@ struct obd_device {
         cfs_list_t                       obd_final_req_queue;
         int                              obd_recovery_stage;
 
-        union {
-                struct obd_device_target obt;
-                struct filter_obd filter;
-                struct client_obd cli;
-                struct ost_obd ost;
-                struct echo_client_obd echo_client;
-                struct echo_obd echo;
-                struct lov_obd lov;
-                struct lmv_obd lmv;
-        } u;
-        /* Fields used by LProcFS */
-        unsigned int           obd_cntr_base;
-        struct lprocfs_stats  *obd_stats;
+       union {
+#ifdef HAVE_SERVER_SUPPORT
+               struct obd_device_target obt;
+               struct filter_obd filter;
+               struct ost_obd ost;
+               struct echo_obd echo;
+#endif
+               struct client_obd cli;
+               struct echo_client_obd echo_client;
+               struct lov_obd lov;
+               struct lmv_obd lmv;
+       } u;
+       /* Fields used by LProcFS */
+       unsigned int           obd_cntr_base;
+       struct lprocfs_stats  *obd_stats;
 
         unsigned int           md_cntr_base;
         struct lprocfs_stats  *md_stats;
@@ -1178,6 +1046,7 @@ struct lu_context;
 #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)
 {
@@ -1187,6 +1056,10 @@ static inline int it_to_lock_mode(struct lookup_intent *it)
         else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_LOOKUP |
                               IT_LAYOUT))
                 return LCK_CR;
+       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;
@@ -1216,24 +1089,24 @@ struct md_op_data {
 #ifdef __KERNEL__
        unsigned int            op_attr_flags;
 #endif
-        __u64                   op_valid;
-        loff_t                  op_attr_blocks;
+       __u64                   op_valid;
+       loff_t                  op_attr_blocks;
 
-        /* Size-on-MDS epoch and flags. */
-        __u64                   op_ioepoch;
+       /* Size-on-MDS epoch and flags. */
+       __u64                   op_ioepoch;
        __u32                   op_flags;
 
-        /* Capa fields */
-        struct obd_capa        *op_capa1;
-        struct obd_capa        *op_capa2;
+       /* Capa fields */
+       struct obd_capa        *op_capa1;
+       struct obd_capa        *op_capa2;
 
-        /* Various operation flags. */
-       __u32                   op_bias;
+       /* Various operation flags. */
+       enum mds_op_bias        op_bias;
 
-        /* Operation type */
+       /* Operation type */
        __u32                   op_opc;
 
-        /* Used by readdir */
+       /* Used by readdir */
        __u64                   op_offset;
 
        /* Used by readdir */
@@ -1242,6 +1115,10 @@ struct md_op_data {
        /* used to transfer info between the stacks of MD client
         * see enum op_cli_flags */
        __u32                   op_cli_flags;
+
+       /* File object data version for HSM release, on client */
+       __u64                   op_data_version;
+       struct lustre_handle    op_lease_handle;
 };
 
 enum op_cli_flags {
@@ -1626,13 +1503,13 @@ static inline struct md_open_data *obd_mod_alloc(void)
 }
 
 #define obd_mod_get(mod) cfs_atomic_inc(&(mod)->mod_refcount)
-#define obd_mod_put(mod)                                        \
-({                                                              \
-        if (cfs_atomic_dec_and_test(&(mod)->mod_refcount)) {          \
-                if ((mod)->mod_open_req)                          \
-                        ptlrpc_req_finished((mod)->mod_open_req);   \
-                OBD_FREE_PTR(mod);                              \
-        }                                                       \
+#define obd_mod_put(mod)                                          \
+({                                                                \
+       if (cfs_atomic_dec_and_test(&(mod)->mod_refcount)) {      \
+               if ((mod)->mod_open_req)                          \
+                       ptlrpc_req_finished((mod)->mod_open_req); \
+               OBD_FREE_PTR(mod);                                \
+       }                                                         \
 })
 
 void obdo_from_inode(struct obdo *dst, struct inode *src, obd_flag valid);