#include <dt_object.h>
#include <md_object.h>
#include <lustre_fid.h>
+#include <range_lock.h>
#define OFD_INIT_OBJID 0
#define OFD_PRECREATE_BATCH_DEFAULT (OBJ_SUBDIR_COUNT * 4)
/* 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,
LPROC_OFD_STATS_GET_INFO,
LPROC_OFD_STATS_SET_INFO,
LPROC_OFD_STATS_QUOTACTL,
+ LPROC_OFD_STATS_PREALLOC,
LPROC_OFD_STATS_LAST,
};
/* preferred BRW size, decided by storage type and capability */
__u32 ofd_brw_size;
- /* checksum types supported on this node */
- enum cksum_types ofd_cksum_types_supported;
-
spinlock_t ofd_flags_lock;
unsigned long ofd_raid_degraded:1,
/* sync journal on writes */
ofd_record_fid_accessed:1,
ofd_lfsck_verify_pfid:1,
ofd_no_precreate:1,
- ofd_skip_lfsck:1,
- /* Whether to enforce T10PI checksum of RPC */
- ofd_checksum_t10pi_enforce:1;
+ ofd_skip_lfsck:1;
struct seq_server_site ofd_seq_site;
/* the limit of SOFT_SYNC RPCs that will trigger a soft sync */
unsigned int ofd_soft_sync_limit;
/* Protect ::ofd_lastid_rebuilding */
struct rw_semaphore ofd_lastid_rwsem;
__u64 ofd_lastid_gen;
- struct ptlrpc_thread ofd_inconsistency_thread;
+ struct task_struct *ofd_inconsistency_task;
struct list_head ofd_inconsistency_list;
spinlock_t ofd_inconsistency_lock;
/* Backwards compatibility */
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)
time64_t ofo_atime_ondisk;
unsigned int ofo_pfid_checking:1,
ofo_pfid_verified:1;
+ struct range_lock_tree ofo_write_tree;
};
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)
{
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)
struct lfsck_req_local fti_lrl;
struct obd_connect_data fti_ocd;
};
+ struct range_lock fti_write_range;
+ unsigned fti_range_locked:1;
};
extern void target_recovery_fini(struct obd_device *obd);
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(struct ofd_device *m,
+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);
/* 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 */
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);