summaryrefslogtreecommitdiffstats
path: root/fs/orangefs/orangefs-kernel.h
diff options
context:
space:
mode:
authorMartin Brandenburg2018-12-14 21:24:43 +0100
committerMike Marshall2019-05-03 20:32:38 +0200
commit52e2d0a3804c095775b178d6b0707ef6ac8e6d04 (patch)
treeeff70498b71911fbceb5ecd3c87b81b4e0517edc /fs/orangefs/orangefs-kernel.h
parentorangefs: avoid fsync service operation on flush (diff)
downloadkernel-qcow2-linux-52e2d0a3804c095775b178d6b0707ef6ac8e6d04.tar.gz
kernel-qcow2-linux-52e2d0a3804c095775b178d6b0707ef6ac8e6d04.tar.xz
kernel-qcow2-linux-52e2d0a3804c095775b178d6b0707ef6ac8e6d04.zip
orangefs: write range tracking
Attach the actual range of bytes written to plus the responsible uid/gid to each dirty page. This information must be sent to the server when the page is written out. Now write_begin, page_mkwrite, and invalidatepage keep up with this information. There are several conditions where they must write out the page immediately to store the new range. Two non-contiguous ranges cannot be stored on a single page. Signed-off-by: Martin Brandenburg <martin@omnibond.com> Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Diffstat (limited to 'fs/orangefs/orangefs-kernel.h')
-rw-r--r--fs/orangefs/orangefs-kernel.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h
index 307bbb61819a..336a3ec0b83e 100644
--- a/fs/orangefs/orangefs-kernel.h
+++ b/fs/orangefs/orangefs-kernel.h
@@ -230,6 +230,13 @@ struct orangefs_cached_xattr {
unsigned long timeout;
};
+struct orangefs_write_range {
+ loff_t pos;
+ size_t len;
+ kuid_t uid;
+ kgid_t gid;
+};
+
extern struct orangefs_stats orangefs_stats;
/*
@@ -342,6 +349,7 @@ void fsid_key_table_finalize(void);
/*
* defined in inode.c
*/
+vm_fault_t orangefs_page_mkwrite(struct vm_fault *);
struct inode *orangefs_new_inode(struct super_block *sb,
struct inode *dir,
int mode,
@@ -383,7 +391,7 @@ bool __is_daemon_in_service(void);
* defined in file.c
*/
ssize_t wait_for_direct_io(enum ORANGEFS_io_type, struct inode *, loff_t *,
- struct iov_iter *, size_t, loff_t);
+ struct iov_iter *, size_t, loff_t, struct orangefs_write_range *);
ssize_t do_readv_writev(enum ORANGEFS_io_type, struct file *, loff_t *,
struct iov_iter *);