diff options
author | Bob Peterson <rpeterso@redhat.com> | 2015-02-19 15:02:16 +0100 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2015-03-18 18:42:22 +0100 |
commit | f42a69fadc4b90b5d59c4672dcbe52dcd4b6a117 (patch) | |
tree | 21d39dbb59bc30e69bb58911a03a956c5cb37177 /fs | |
parent | GFS2: gfs2_set_acl(): Cache "no acl" as well (diff) | |
download | linux-f42a69fadc4b90b5d59c4672dcbe52dcd4b6a117.tar.xz linux-f42a69fadc4b90b5d59c4672dcbe52dcd4b6a117.zip |
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) } } +static ssize_t gfs2_file_splice_write(struct pipe_inode_info *pipe, + struct file *out, loff_t *ppos, + size_t len, unsigned int flags) +{ + int error; + struct gfs2_inode *ip = GFS2_I(out->f_mapping->host); + + error = gfs2_rs_alloc(ip); + if (error) + return (ssize_t)error; + + gfs2_size_hint(out, *ppos, len); + + return iter_file_splice_write(pipe, out, ppos, len, flags); +} + const struct file_operations gfs2_file_fops = { .llseek = gfs2_llseek, .read = new_sync_read, @@ -1077,7 +1093,7 @@ const struct file_operations gfs2_file_fops = { .lock = gfs2_lock, .flock = gfs2_flock, .splice_read = generic_file_splice_read, - .splice_write = iter_file_splice_write, + .splice_write = gfs2_file_splice_write, .setlease = simple_nosetlease, .fallocate = gfs2_fallocate, }; @@ -1107,7 +1123,7 @@ const struct file_operations gfs2_file_fops_nolock = { .release = gfs2_release, .fsync = gfs2_fsync, .splice_read = generic_file_splice_read, - .splice_write = iter_file_splice_write, + .splice_write = gfs2_file_splice_write, .setlease = generic_setlease, .fallocate = gfs2_fallocate, }; |