struct obd_export;
struct page;
-enum vvp_io_subtype {
- /** normal IO */
- IO_NORMAL,
- /** io started from splice_{read|write} */
- IO_SPLICE,
-};
-
/**
* IO state private to VVP layer.
*/
struct cl_page_list ft_queue;
} fault;
struct {
- struct pipe_inode_info *vui_pipe;
- unsigned int vui_flags;
- } splice;
- struct {
struct cl_page_list vui_queue;
unsigned long vui_written;
+ unsigned long vui_read;
int vui_from;
int vui_to;
- } write;
+ } readwrite; /* normal io */
} u;
- enum vvp_io_subtype vui_io_subtype;
-
/**
* Layout version when this IO is initialized
*/
static inline pgoff_t vvp_index(struct vvp_page *vpg)
{
- return vpg->vpg_cl.cpl_index;
+ return vpg->vpg_page->index;
}
struct vvp_device {
static inline struct vvp_device *lu2vvp_dev(const struct lu_device *d)
{
- return container_of0(d, struct vvp_device, vdv_cl.cd_lu_dev);
+ return container_of_safe(d, struct vvp_device, vdv_cl.cd_lu_dev);
}
static inline struct vvp_device *cl2vvp_dev(const struct cl_device *d)
{
- return container_of0(d, struct vvp_device, vdv_cl);
+ return container_of_safe(d, struct vvp_device, vdv_cl);
}
static inline struct vvp_object *cl2vvp(const struct cl_object *obj)
{
- return container_of0(obj, struct vvp_object, vob_cl);
+ return container_of_safe(obj, struct vvp_object, vob_cl);
}
static inline struct vvp_object *lu2vvp(const struct lu_object *obj)
{
- return container_of0(obj, struct vvp_object, vob_cl.co_lu);
+ return container_of_safe(obj, struct vvp_object, vob_cl.co_lu);
}
static inline struct inode *vvp_object_inode(const struct cl_object *obj)
int vvp_global_init(void);
void vvp_global_fini(void);
+#ifndef HAVE_ACCOUNT_PAGE_DIRTIED_EXPORT
+extern unsigned int (*vvp_account_page_dirtied)(struct page *page,
+ struct address_space *mapping);
+#endif
+
extern const struct file_operations vvp_dump_pgcache_file_ops;
#endif /* VVP_INTERNAL_H */