From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Thu, 19 Feb 2015 20:58:51 +0000 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Allocate reservation during splice_write In-Reply-To: <513731613.16234990.1424370256954.JavaMail.zimbra@redhat.com> References: <513731613.16234990.1424370256954.JavaMail.zimbra@redhat.com> Message-ID: <54E64E8B.7070805@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, On 19/02/15 18:24, Bob Peterson wrote: > Hi, > > 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. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson Acked-by: Steven Whitehouse Steve. > --- > fs/gfs2/file.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c > index ec9c2d3..bd86e79 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, > };