Whamcloud - gitweb
LU-14052 ofd: support for multiple access readers
[fs/lustre-release.git] / lustre / ofd / ofd_internal.h
index 8f6a70e..d7ac1da 100644 (file)
 
 #define OFD_SOFT_SYNC_LIMIT_DEFAULT 16
 
+/*
+ * update atime if on-disk value older than client's one
+ * by OFD_ATIME_DIFF or more
+ */
+#define OFD_DEF_ATIME_DIFF     0 /* disabled */
+
 /* request stats */
 enum {
-       LPROC_OFD_STATS_READ = 0,
+       LPROC_OFD_STATS_READ_BYTES = 0,
+       LPROC_OFD_STATS_WRITE_BYTES,
+       LPROC_OFD_STATS_READ,
        LPROC_OFD_STATS_WRITE,
        LPROC_OFD_STATS_GETATTR,
        LPROC_OFD_STATS_SETATTR,
@@ -67,6 +75,7 @@ enum {
        LPROC_OFD_STATS_GET_INFO,
        LPROC_OFD_STATS_SET_INFO,
        LPROC_OFD_STATS_QUOTACTL,
+       LPROC_OFD_STATS_PREALLOC,
        LPROC_OFD_STATS_LAST,
 };
 
@@ -114,6 +123,10 @@ struct ofd_device {
        __u64                    ofd_inconsistency_self_detected;
        __u64                    ofd_inconsistency_self_repaired;
 
+       struct ofd_access_log   *ofd_access_log;
+       unsigned int             ofd_access_log_size;
+       unsigned int             ofd_access_log_mask;
+
        struct list_head        ofd_seq_list;
        rwlock_t                ofd_seq_list_lock;
        int                     ofd_seq_count;
@@ -150,11 +163,12 @@ struct ofd_device {
        struct attribute        *ofd_read_cache_enable;
        struct attribute        *ofd_read_cache_max_filesize;
        struct attribute        *ofd_write_cache_enable;
+       time64_t                 ofd_atime_diff;
 };
 
 static inline struct ofd_device *ofd_dev(struct lu_device *d)
 {
-       return container_of0(d, struct ofd_device, ofd_dt_dev.dd_lu_dev);
+       return container_of_safe(d, struct ofd_device, ofd_dt_dev.dd_lu_dev);
 }
 
 static inline struct obd_device *ofd_obd(struct ofd_device *ofd)
@@ -176,13 +190,14 @@ struct ofd_object {
        struct lu_object_header ofo_header;
        struct dt_object        ofo_obj;
        struct filter_fid       ofo_ff;
+       time64_t                ofo_atime_ondisk;
        unsigned int            ofo_pfid_checking:1,
                                ofo_pfid_verified:1;
 };
 
 static inline struct ofd_object *ofd_obj(struct lu_object *o)
 {
-       return container_of0(o, struct ofd_object, ofo_obj.do_lu);
+       return container_of_safe(o, struct ofd_object, ofo_obj.do_lu);
 }
 
 static inline int ofd_object_exists(struct ofd_object *obj)
@@ -202,7 +217,7 @@ static inline struct dt_object *ofd_object_child(struct ofd_object *_obj)
 {
        struct lu_object *lu = &(_obj)->ofo_obj.do_lu;
 
-       return container_of0(lu_object_next(lu), struct dt_object, do_lu);
+       return container_of(lu_object_next(lu), struct dt_object, do_lu);
 }
 
 static inline struct ofd_device *ofd_obj2dev(const struct ofd_object *fo)
@@ -281,6 +296,18 @@ struct ofd_thread_info {
 extern void target_recovery_fini(struct obd_device *obd);
 extern void target_recovery_init(struct lu_target *lut, svc_handler_t handler);
 
+/* ofd_access_log.c */
+bool ofd_access_log_size_is_valid(unsigned int size);
+int ofd_access_log_module_init(void);
+void ofd_access_log_module_exit(void);
+
+struct ofd_access_log;
+struct ofd_access_log *ofd_access_log_create(const char *ofd_name, size_t size);
+void ofd_access_log_delete(struct ofd_access_log *oal);
+void ofd_access(const struct lu_env *env, struct ofd_device *m,
+               const struct lu_fid *parent_fid, __u64 begin, __u64 end,
+               unsigned int size, unsigned int segment_count, int rw);
+
 /* ofd_dev.c */
 extern struct lu_context_key ofd_thread_key;
 int ofd_postrecov(const struct lu_env *env, struct ofd_device *ofd);
@@ -343,9 +370,10 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
 /* lproc_ofd.c */
 int ofd_tunables_init(struct ofd_device *ofd);
 #ifdef CONFIG_PROC_FS
-void ofd_stats_counter_init(struct lprocfs_stats *stats);
+void ofd_stats_counter_init(struct lprocfs_stats *stats, unsigned int offset);
 #else
-static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
+static inline void ofd_stats_counter_init(struct lprocfs_stats *stats,
+                                         unsigned int offset) {}
 #endif
 
 /* ofd_objects.c */
@@ -368,6 +396,9 @@ int ofd_attr_set(const struct lu_env *env, struct ofd_object *fo,
 int ofd_object_punch(const struct lu_env *env, struct ofd_object *fo,
                     __u64 start, __u64 end, struct lu_attr *la,
                     struct obdo *oa);
+int ofd_object_fallocate(const struct lu_env *env, struct ofd_object *fo,
+                        __u64 start, __u64 end, int mode, struct lu_attr *la,
+                        struct obdo *oa);
 int ofd_destroy(const struct lu_env *, struct ofd_object *, int);
 int ofd_attr_get(const struct lu_env *env, struct ofd_object *fo,
                 struct lu_attr *la);