diff options
author | Bob Peterson <rpeterso@redhat.com> | 2015-02-19 09:02:16 -0500 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2015-03-18 13:42:22 -0400 |
commit | f42a69fadc4b90b5d59c4672dcbe52dcd4b6a117 (patch) | |
tree | 21d39dbb59bc30e69bb58911a03a956c5cb37177 /fs | |
parent | 932e468a377f62569fe3818f160fadbaef3f26bd (diff) |
GFS2: Allocate reservation during splice_write
This patch adds a GFS2-specific function for splice_write which
first calls function gfs2_rs_alloc to make sure a reservation
structure has been allocated before attempting to reserve blocks.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Acked-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/gfs2/file.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 3e32bb8e2d7e..556d774f9aa9 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -1063,6 +1063,22 @@ static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl) | |||
1063 | } | 1063 | } |
1064 | } | 1064 | } |
1065 | 1065 | ||
1066 | static ssize_t gfs2_file_splice_write(struct pipe_inode_info *pipe, | ||
1067 | struct file *out, loff_t *ppos, | ||
1068 | size_t len, unsigned int flags) | ||
1069 | { | ||
1070 | int error; | ||
1071 | struct gfs2_inode *ip = GFS2_I(out->f_mapping->host); | ||
1072 | |||
1073 | error = gfs2_rs_alloc(ip); | ||
1074 | if (error) | ||
1075 | return (ssize_t)error; | ||
1076 | |||
1077 | gfs2_size_hint(out, *ppos, len); | ||
1078 | |||
1079 | return iter_file_splice_write(pipe, out, ppos, len, flags); | ||
1080 | } | ||
1081 | |||
1066 | const struct file_operations gfs2_file_fops = { | 1082 | const struct file_operations gfs2_file_fops = { |
1067 | .llseek = gfs2_llseek, | 1083 | .llseek = gfs2_llseek, |
1068 | .read = new_sync_read, | 1084 | .read = new_sync_read, |
@@ -1077,7 +1093,7 @@ const struct file_operations gfs2_file_fops = { | |||
1077 | .lock = gfs2_lock, | 1093 | .lock = gfs2_lock, |
1078 | .flock = gfs2_flock, | 1094 | .flock = gfs2_flock, |
1079 | .splice_read = generic_file_splice_read, | 1095 | .splice_read = generic_file_splice_read, |
1080 | .splice_write = iter_file_splice_write, | 1096 | .splice_write = gfs2_file_splice_write, |
1081 | .setlease = simple_nosetlease, | 1097 | .setlease = simple_nosetlease, |
1082 | .fallocate = gfs2_fallocate, | 1098 | .fallocate = gfs2_fallocate, |
1083 | }; | 1099 | }; |
@@ -1107,7 +1123,7 @@ const struct file_operations gfs2_file_fops_nolock = { | |||
1107 | .release = gfs2_release, | 1123 | .release = gfs2_release, |
1108 | .fsync = gfs2_fsync, | 1124 | .fsync = gfs2_fsync, |
1109 | .splice_read = generic_file_splice_read, | 1125 | .splice_read = generic_file_splice_read, |
1110 | .splice_write = iter_file_splice_write, | 1126 | .splice_write = gfs2_file_splice_write, |
1111 | .setlease = generic_setlease, | 1127 | .setlease = generic_setlease, |
1112 | .fallocate = gfs2_fallocate, | 1128 | .fallocate = gfs2_fallocate, |
1113 | }; | 1129 | }; |