aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/fuse/file.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 504e61b7fd75..e3fee88831d4 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -2171,6 +2171,37 @@ fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
2171 return ret; 2171 return ret;
2172} 2172}
2173 2173
2174long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
2175 loff_t length)
2176{
2177 struct fuse_file *ff = file->private_data;
2178 struct fuse_conn *fc = ff->fc;
2179 struct fuse_req *req;
2180 struct fuse_fallocate_in inarg = {
2181 .fh = ff->fh,
2182 .offset = offset,
2183 .length = length,
2184 .mode = mode
2185 };
2186 int err;
2187
2188 req = fuse_get_req(fc);
2189 if (IS_ERR(req))
2190 return PTR_ERR(req);
2191
2192 req->in.h.opcode = FUSE_FALLOCATE;
2193 req->in.h.nodeid = ff->nodeid;
2194 req->in.numargs = 1;
2195 req->in.args[0].size = sizeof(inarg);
2196 req->in.args[0].value = &inarg;
2197 fuse_request_send(fc, req);
2198 err = req->out.h.error;
2199 fuse_put_request(fc, req);
2200
2201 return err;
2202}
2203EXPORT_SYMBOL_GPL(fuse_file_fallocate);
2204
2174static const struct file_operations fuse_file_operations = { 2205static const struct file_operations fuse_file_operations = {
2175 .llseek = fuse_file_llseek, 2206 .llseek = fuse_file_llseek,
2176 .read = do_sync_read, 2207 .read = do_sync_read,
@@ -2188,6 +2219,7 @@ static const struct file_operations fuse_file_operations = {
2188 .unlocked_ioctl = fuse_file_ioctl, 2219 .unlocked_ioctl = fuse_file_ioctl,
2189 .compat_ioctl = fuse_file_compat_ioctl, 2220 .compat_ioctl = fuse_file_compat_ioctl,
2190 .poll = fuse_file_poll, 2221 .poll = fuse_file_poll,
2222 .fallocate = fuse_file_fallocate,
2191}; 2223};
2192 2224
2193static const struct file_operations fuse_direct_io_file_operations = { 2225static const struct file_operations fuse_direct_io_file_operations = {
@@ -2204,6 +2236,7 @@ static const struct file_operations fuse_direct_io_file_operations = {
2204 .unlocked_ioctl = fuse_file_ioctl, 2236 .unlocked_ioctl = fuse_file_ioctl,
2205 .compat_ioctl = fuse_file_compat_ioctl, 2237 .compat_ioctl = fuse_file_compat_ioctl,
2206 .poll = fuse_file_poll, 2238 .poll = fuse_file_poll,
2239 .fallocate = fuse_file_fallocate,
2207 /* no splice_read */ 2240 /* no splice_read */
2208}; 2241};
2209 2242