aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorBob Peterson <rpeterso@redhat.com>2015-02-19 09:02:16 -0500
committerBob Peterson <rpeterso@redhat.com>2015-03-18 13:42:22 -0400
commitf42a69fadc4b90b5d59c4672dcbe52dcd4b6a117 (patch)
tree21d39dbb59bc30e69bb58911a03a956c5cb37177 /fs
parent932e468a377f62569fe3818f160fadbaef3f26bd (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.c20
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
1066static 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
1066const struct file_operations gfs2_file_fops = { 1082const 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};