1
2
3
4
5
6
7
8
9#include "fuse_i.h"
10
11#include <linux/pagemap.h>
12#include <linux/slab.h>
13#include <linux/kernel.h>
14#include <linux/sched.h>
15#include <linux/module.h>
16#include <linux/compat.h>
17#include <linux/swap.h>
18
19static const struct file_operations fuse_direct_io_file_operations;
20
21static int fuse_send_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
22 int opcode, struct fuse_open_out *outargp)
23{
24 struct fuse_open_in inarg;
25 struct fuse_req *req;
26 int err;
27
28 req = fuse_get_req(fc);
29 if (IS_ERR(req))
30 return PTR_ERR(req);
31
32 memset(&inarg, 0, sizeof(inarg));
33 inarg.flags = file->f_flags & ~(O_CREAT | O_EXCL | O_NOCTTY);
34 if (!fc->atomic_o_trunc)
35 inarg.flags &= ~O_TRUNC;
36 req->in.h.opcode = opcode;
37 req->in.h.nodeid = nodeid;
38 req->in.numargs = 1;
39 req->in.args[0].size = sizeof(inarg);
40 req->in.args[0].value = &inarg;
41 req->out.numargs = 1;
42 req->out.args[0].size = sizeof(*outargp);
43 req->out.args[0].value = outargp;
44 fuse_request_send(fc, req);
45 err = req->out.h.error;
46 fuse_put_request(fc, req);
47
48 return err;
49}
50
51struct fuse_file *fuse_file_alloc(struct fuse_conn *fc)
52{
53 struct fuse_file *ff;
54
55 ff = kmalloc(sizeof(struct fuse_file), GFP_KERNEL);
56 if (unlikely(!ff))
57 return NULL;
58
59 ff->fc = fc;
60 ff->reserved_req = fuse_request_alloc();
61 if (unlikely(!ff->reserved_req)) {
62 kfree(ff);
63 return NULL;
64 }
65
66 INIT_LIST_HEAD(&ff->write_entry);
67 atomic_set(&ff->count, 0);
68 RB_CLEAR_NODE(&ff->polled_node);
69 init_waitqueue_head(&ff->poll_wait);
70
71 spin_lock(&fc->lock);
72 ff->kh = ++fc->khctr;
73 spin_unlock(&fc->lock);
74
75 return ff;
76}
77
78void fuse_file_free(struct fuse_file *ff)
79{
80 fuse_request_free(ff->reserved_req);
81 kfree(ff);
82}
83
84struct fuse_file *fuse_file_get(struct fuse_file *ff)
85{
86 atomic_inc(&ff->count);
87 return ff;
88}
89
90static void fuse_release_async(struct work_struct *work)
91{
92 struct fuse_req *req;
93 struct fuse_conn *fc;
94 struct path path;
95
96 req = container_of(work, struct fuse_req, misc.release.work);
97 path = req->misc.release.path;
98 fc = get_fuse_conn(path.dentry->d_inode);
99
100 fuse_put_request(fc, req);
101 path_put(&path);
102}
103
104static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req)
105{
106 if (fc->destroy_req) {
107
108
109
110
111
112
113
114
115 atomic_inc(&req->count);
116 INIT_WORK(&req->misc.release.work, fuse_release_async);
117 schedule_work(&req->misc.release.work);
118 } else {
119 path_put(&req->misc.release.path);
120 }
121}
122
123static void fuse_file_put(struct fuse_file *ff, bool sync)
124{
125 if (atomic_dec_and_test(&ff->count)) {
126 struct fuse_req *req = ff->reserved_req;
127
128 if (sync) {
129 fuse_request_send(ff->fc, req);
130 path_put(&req->misc.release.path);
131 fuse_put_request(ff->fc, req);
132 } else {
133 req->end = fuse_release_end;
134 fuse_request_send_background(ff->fc, req);
135 }
136 kfree(ff);
137 }
138}
139
140int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
141 bool isdir)
142{
143 struct fuse_open_out outarg;
144 struct fuse_file *ff;
145 int err;
146 int opcode = isdir ? FUSE_OPENDIR : FUSE_OPEN;
147
148 ff = fuse_file_alloc(fc);
149 if (!ff)
150 return -ENOMEM;
151
152 err = fuse_send_open(fc, nodeid, file, opcode, &outarg);
153 if (err) {
154 fuse_file_free(ff);
155 return err;
156 }
157
158 if (isdir)
159 outarg.open_flags &= ~FOPEN_DIRECT_IO;
160
161 ff->fh = outarg.fh;
162 ff->nodeid = nodeid;
163 ff->open_flags = outarg.open_flags;
164 file->private_data = fuse_file_get(ff);
165
166 return 0;
167}
168EXPORT_SYMBOL_GPL(fuse_do_open);
169
170void fuse_finish_open(struct inode *inode, struct file *file)
171{
172 struct fuse_file *ff = file->private_data;
173 struct fuse_conn *fc = get_fuse_conn(inode);
174
175 if (ff->open_flags & FOPEN_DIRECT_IO)
176 file->f_op = &fuse_direct_io_file_operations;
177 if (!(ff->open_flags & FOPEN_KEEP_CACHE))
178 invalidate_inode_pages2(inode->i_mapping);
179 if (ff->open_flags & FOPEN_NONSEEKABLE)
180 nonseekable_open(inode, file);
181 if (fc->atomic_o_trunc && (file->f_flags & O_TRUNC)) {
182 struct fuse_inode *fi = get_fuse_inode(inode);
183
184 spin_lock(&fc->lock);
185 fi->attr_version = ++fc->attr_version;
186 i_size_write(inode, 0);
187 spin_unlock(&fc->lock);
188 fuse_invalidate_attr(inode);
189 }
190}
191
192int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
193{
194 struct fuse_conn *fc = get_fuse_conn(inode);
195 int err;
196
197 err = generic_file_open(inode, file);
198 if (err)
199 return err;
200
201 err = fuse_do_open(fc, get_node_id(inode), file, isdir);
202 if (err)
203 return err;
204
205 fuse_finish_open(inode, file);
206
207 return 0;
208}
209
210static void fuse_prepare_release(struct fuse_file *ff, int flags, int opcode)
211{
212 struct fuse_conn *fc = ff->fc;
213 struct fuse_req *req = ff->reserved_req;
214 struct fuse_release_in *inarg = &req->misc.release.in;
215
216 spin_lock(&fc->lock);
217 list_del(&ff->write_entry);
218 if (!RB_EMPTY_NODE(&ff->polled_node))
219 rb_erase(&ff->polled_node, &fc->polled_files);
220 spin_unlock(&fc->lock);
221
222 wake_up_interruptible_all(&ff->poll_wait);
223
224 inarg->fh = ff->fh;
225 inarg->flags = flags;
226 req->in.h.opcode = opcode;
227 req->in.h.nodeid = ff->nodeid;
228 req->in.numargs = 1;
229 req->in.args[0].size = sizeof(struct fuse_release_in);
230 req->in.args[0].value = inarg;
231}
232
233void fuse_release_common(struct file *file, int opcode)
234{
235 struct fuse_file *ff;
236 struct fuse_req *req;
237
238 ff = file->private_data;
239 if (unlikely(!ff))
240 return;
241
242 req = ff->reserved_req;
243 fuse_prepare_release(ff, file->f_flags, opcode);
244
245 if (ff->flock) {
246 struct fuse_release_in *inarg = &req->misc.release.in;
247 inarg->release_flags |= FUSE_RELEASE_FLOCK_UNLOCK;
248 inarg->lock_owner = fuse_lock_owner_id(ff->fc,
249 (fl_owner_t) file);
250 }
251
252 path_get(&file->f_path);
253 req->misc.release.path = file->f_path;
254
255
256
257
258
259
260
261
262
263
264 fuse_file_put(ff, ff->fc->destroy_req != NULL);
265}
266
267static int fuse_open(struct inode *inode, struct file *file)
268{
269 return fuse_open_common(inode, file, false);
270}
271
272static int fuse_release(struct inode *inode, struct file *file)
273{
274 fuse_release_common(file, FUSE_RELEASE);
275
276
277 return 0;
278}
279
280void fuse_sync_release(struct fuse_file *ff, int flags)
281{
282 WARN_ON(atomic_read(&ff->count) > 1);
283 fuse_prepare_release(ff, flags, FUSE_RELEASE);
284 ff->reserved_req->force = 1;
285 fuse_request_send(ff->fc, ff->reserved_req);
286 fuse_put_request(ff->fc, ff->reserved_req);
287 kfree(ff);
288}
289EXPORT_SYMBOL_GPL(fuse_sync_release);
290
291
292
293
294
295u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id)
296{
297 u32 *k = fc->scramble_key;
298 u64 v = (unsigned long) id;
299 u32 v0 = v;
300 u32 v1 = v >> 32;
301 u32 sum = 0;
302 int i;
303
304 for (i = 0; i < 32; i++) {
305 v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]);
306 sum += 0x9E3779B9;
307 v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]);
308 }
309
310 return (u64) v0 + ((u64) v1 << 32);
311}
312
313
314
315
316
317
318
319static bool fuse_page_is_writeback(struct inode *inode, pgoff_t index)
320{
321 struct fuse_conn *fc = get_fuse_conn(inode);
322 struct fuse_inode *fi = get_fuse_inode(inode);
323 struct fuse_req *req;
324 bool found = false;
325
326 spin_lock(&fc->lock);
327 list_for_each_entry(req, &fi->writepages, writepages_entry) {
328 pgoff_t curr_index;
329
330 BUG_ON(req->inode != inode);
331 curr_index = req->misc.write.in.offset >> PAGE_CACHE_SHIFT;
332 if (curr_index == index) {
333 found = true;
334 break;
335 }
336 }
337 spin_unlock(&fc->lock);
338
339 return found;
340}
341
342
343
344
345
346
347
348static int fuse_wait_on_page_writeback(struct inode *inode, pgoff_t index)
349{
350 struct fuse_inode *fi = get_fuse_inode(inode);
351
352 wait_event(fi->page_waitq, !fuse_page_is_writeback(inode, index));
353 return 0;
354}
355
356static int fuse_flush(struct file *file, fl_owner_t id)
357{
358 struct inode *inode = file->f_path.dentry->d_inode;
359 struct fuse_conn *fc = get_fuse_conn(inode);
360 struct fuse_file *ff = file->private_data;
361 struct fuse_req *req;
362 struct fuse_flush_in inarg;
363 int err;
364
365 if (is_bad_inode(inode))
366 return -EIO;
367
368 if (fc->no_flush)
369 return 0;
370
371 req = fuse_get_req_nofail(fc, file);
372 memset(&inarg, 0, sizeof(inarg));
373 inarg.fh = ff->fh;
374 inarg.lock_owner = fuse_lock_owner_id(fc, id);
375 req->in.h.opcode = FUSE_FLUSH;
376 req->in.h.nodeid = get_node_id(inode);
377 req->in.numargs = 1;
378 req->in.args[0].size = sizeof(inarg);
379 req->in.args[0].value = &inarg;
380 req->force = 1;
381 fuse_request_send(fc, req);
382 err = req->out.h.error;
383 fuse_put_request(fc, req);
384 if (err == -ENOSYS) {
385 fc->no_flush = 1;
386 err = 0;
387 }
388 return err;
389}
390
391
392
393
394
395
396
397
398
399
400static void fuse_sync_writes(struct inode *inode)
401{
402 fuse_set_nowrite(inode);
403 fuse_release_nowrite(inode);
404}
405
406int fuse_fsync_common(struct file *file, loff_t start, loff_t end,
407 int datasync, int isdir)
408{
409 struct inode *inode = file->f_mapping->host;
410 struct fuse_conn *fc = get_fuse_conn(inode);
411 struct fuse_file *ff = file->private_data;
412 struct fuse_req *req;
413 struct fuse_fsync_in inarg;
414 int err;
415
416 if (is_bad_inode(inode))
417 return -EIO;
418
419 err = filemap_write_and_wait_range(inode->i_mapping, start, end);
420 if (err)
421 return err;
422
423 if ((!isdir && fc->no_fsync) || (isdir && fc->no_fsyncdir))
424 return 0;
425
426 mutex_lock(&inode->i_mutex);
427
428
429
430
431
432
433 err = write_inode_now(inode, 0);
434 if (err)
435 goto out;
436
437 fuse_sync_writes(inode);
438
439 req = fuse_get_req(fc);
440 if (IS_ERR(req)) {
441 err = PTR_ERR(req);
442 goto out;
443 }
444
445 memset(&inarg, 0, sizeof(inarg));
446 inarg.fh = ff->fh;
447 inarg.fsync_flags = datasync ? 1 : 0;
448 req->in.h.opcode = isdir ? FUSE_FSYNCDIR : FUSE_FSYNC;
449 req->in.h.nodeid = get_node_id(inode);
450 req->in.numargs = 1;
451 req->in.args[0].size = sizeof(inarg);
452 req->in.args[0].value = &inarg;
453 fuse_request_send(fc, req);
454 err = req->out.h.error;
455 fuse_put_request(fc, req);
456 if (err == -ENOSYS) {
457 if (isdir)
458 fc->no_fsyncdir = 1;
459 else
460 fc->no_fsync = 1;
461 err = 0;
462 }
463out:
464 mutex_unlock(&inode->i_mutex);
465 return err;
466}
467
468static int fuse_fsync(struct file *file, loff_t start, loff_t end,
469 int datasync)
470{
471 return fuse_fsync_common(file, start, end, datasync, 0);
472}
473
474void fuse_read_fill(struct fuse_req *req, struct file *file, loff_t pos,
475 size_t count, int opcode)
476{
477 struct fuse_read_in *inarg = &req->misc.read.in;
478 struct fuse_file *ff = file->private_data;
479
480 inarg->fh = ff->fh;
481 inarg->offset = pos;
482 inarg->size = count;
483 inarg->flags = file->f_flags;
484 req->in.h.opcode = opcode;
485 req->in.h.nodeid = ff->nodeid;
486 req->in.numargs = 1;
487 req->in.args[0].size = sizeof(struct fuse_read_in);
488 req->in.args[0].value = inarg;
489 req->out.argvar = 1;
490 req->out.numargs = 1;
491 req->out.args[0].size = count;
492}
493
494static size_t fuse_send_read(struct fuse_req *req, struct file *file,
495 loff_t pos, size_t count, fl_owner_t owner)
496{
497 struct fuse_file *ff = file->private_data;
498 struct fuse_conn *fc = ff->fc;
499
500 fuse_read_fill(req, file, pos, count, FUSE_READ);
501 if (owner != NULL) {
502 struct fuse_read_in *inarg = &req->misc.read.in;
503
504 inarg->read_flags |= FUSE_READ_LOCKOWNER;
505 inarg->lock_owner = fuse_lock_owner_id(fc, owner);
506 }
507 fuse_request_send(fc, req);
508 return req->out.args[0].size;
509}
510
511static void fuse_read_update_size(struct inode *inode, loff_t size,
512 u64 attr_ver)
513{
514 struct fuse_conn *fc = get_fuse_conn(inode);
515 struct fuse_inode *fi = get_fuse_inode(inode);
516
517 spin_lock(&fc->lock);
518 if (attr_ver == fi->attr_version && size < inode->i_size) {
519 fi->attr_version = ++fc->attr_version;
520 i_size_write(inode, size);
521 }
522 spin_unlock(&fc->lock);
523}
524
525static int fuse_readpage(struct file *file, struct page *page)
526{
527 struct inode *inode = page->mapping->host;
528 struct fuse_conn *fc = get_fuse_conn(inode);
529 struct fuse_req *req;
530 size_t num_read;
531 loff_t pos = page_offset(page);
532 size_t count = PAGE_CACHE_SIZE;
533 u64 attr_ver;
534 int err;
535
536 err = -EIO;
537 if (is_bad_inode(inode))
538 goto out;
539
540
541
542
543
544
545 fuse_wait_on_page_writeback(inode, page->index);
546
547 req = fuse_get_req(fc);
548 err = PTR_ERR(req);
549 if (IS_ERR(req))
550 goto out;
551
552 attr_ver = fuse_get_attr_version(fc);
553
554 req->out.page_zeroing = 1;
555 req->out.argpages = 1;
556 req->num_pages = 1;
557 req->pages[0] = page;
558 num_read = fuse_send_read(req, file, pos, count, NULL);
559 err = req->out.h.error;
560 fuse_put_request(fc, req);
561
562 if (!err) {
563
564
565
566 if (num_read < count)
567 fuse_read_update_size(inode, pos + num_read, attr_ver);
568
569 SetPageUptodate(page);
570 }
571
572 fuse_invalidate_attr(inode);
573 out:
574 unlock_page(page);
575 return err;
576}
577
578static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req)
579{
580 int i;
581 size_t count = req->misc.read.in.size;
582 size_t num_read = req->out.args[0].size;
583 struct address_space *mapping = NULL;
584
585 for (i = 0; mapping == NULL && i < req->num_pages; i++)
586 mapping = req->pages[i]->mapping;
587
588 if (mapping) {
589 struct inode *inode = mapping->host;
590
591
592
593
594 if (!req->out.h.error && num_read < count) {
595 loff_t pos;
596
597 pos = page_offset(req->pages[0]) + num_read;
598 fuse_read_update_size(inode, pos,
599 req->misc.read.attr_ver);
600 }
601 fuse_invalidate_attr(inode);
602 }
603
604 for (i = 0; i < req->num_pages; i++) {
605 struct page *page = req->pages[i];
606 if (!req->out.h.error)
607 SetPageUptodate(page);
608 else
609 SetPageError(page);
610 unlock_page(page);
611 page_cache_release(page);
612 }
613 if (req->ff)
614 fuse_file_put(req->ff, false);
615}
616
617static void fuse_send_readpages(struct fuse_req *req, struct file *file)
618{
619 struct fuse_file *ff = file->private_data;
620 struct fuse_conn *fc = ff->fc;
621 loff_t pos = page_offset(req->pages[0]);
622 size_t count = req->num_pages << PAGE_CACHE_SHIFT;
623
624 req->out.argpages = 1;
625 req->out.page_zeroing = 1;
626 req->out.page_replace = 1;
627 fuse_read_fill(req, file, pos, count, FUSE_READ);
628 req->misc.read.attr_ver = fuse_get_attr_version(fc);
629 if (fc->async_read) {
630 req->ff = fuse_file_get(ff);
631 req->end = fuse_readpages_end;
632 fuse_request_send_background(fc, req);
633 } else {
634 fuse_request_send(fc, req);
635 fuse_readpages_end(fc, req);
636 fuse_put_request(fc, req);
637 }
638}
639
640struct fuse_fill_data {
641 struct fuse_req *req;
642 struct file *file;
643 struct inode *inode;
644};
645
646static int fuse_readpages_fill(void *_data, struct page *page)
647{
648 struct fuse_fill_data *data = _data;
649 struct fuse_req *req = data->req;
650 struct inode *inode = data->inode;
651 struct fuse_conn *fc = get_fuse_conn(inode);
652
653 fuse_wait_on_page_writeback(inode, page->index);
654
655 if (req->num_pages &&
656 (req->num_pages == FUSE_MAX_PAGES_PER_REQ ||
657 (req->num_pages + 1) * PAGE_CACHE_SIZE > fc->max_read ||
658 req->pages[req->num_pages - 1]->index + 1 != page->index)) {
659 fuse_send_readpages(req, data->file);
660 data->req = req = fuse_get_req(fc);
661 if (IS_ERR(req)) {
662 unlock_page(page);
663 return PTR_ERR(req);
664 }
665 }
666 page_cache_get(page);
667 req->pages[req->num_pages] = page;
668 req->num_pages++;
669 return 0;
670}
671
672static int fuse_readpages(struct file *file, struct address_space *mapping,
673 struct list_head *pages, unsigned nr_pages)
674{
675 struct inode *inode = mapping->host;
676 struct fuse_conn *fc = get_fuse_conn(inode);
677 struct fuse_fill_data data;
678 int err;
679
680 err = -EIO;
681 if (is_bad_inode(inode))
682 goto out;
683
684 data.file = file;
685 data.inode = inode;
686 data.req = fuse_get_req(fc);
687 err = PTR_ERR(data.req);
688 if (IS_ERR(data.req))
689 goto out;
690
691 err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
692 if (!err) {
693 if (data.req->num_pages)
694 fuse_send_readpages(data.req, file);
695 else
696 fuse_put_request(fc, data.req);
697 }
698out:
699 return err;
700}
701
702static ssize_t fuse_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
703 unsigned long nr_segs, loff_t pos)
704{
705 struct inode *inode = iocb->ki_filp->f_mapping->host;
706 struct fuse_conn *fc = get_fuse_conn(inode);
707
708
709
710
711
712
713 if (fc->auto_inval_data ||
714 (pos + iov_length(iov, nr_segs) > i_size_read(inode))) {
715 int err;
716 err = fuse_update_attributes(inode, NULL, iocb->ki_filp, NULL);
717 if (err)
718 return err;
719 }
720
721 return generic_file_aio_read(iocb, iov, nr_segs, pos);
722}
723
724static void fuse_write_fill(struct fuse_req *req, struct fuse_file *ff,
725 loff_t pos, size_t count)
726{
727 struct fuse_write_in *inarg = &req->misc.write.in;
728 struct fuse_write_out *outarg = &req->misc.write.out;
729
730 inarg->fh = ff->fh;
731 inarg->offset = pos;
732 inarg->size = count;
733 req->in.h.opcode = FUSE_WRITE;
734 req->in.h.nodeid = ff->nodeid;
735 req->in.numargs = 2;
736 if (ff->fc->minor < 9)
737 req->in.args[0].size = FUSE_COMPAT_WRITE_IN_SIZE;
738 else
739 req->in.args[0].size = sizeof(struct fuse_write_in);
740 req->in.args[0].value = inarg;
741 req->in.args[1].size = count;
742 req->out.numargs = 1;
743 req->out.args[0].size = sizeof(struct fuse_write_out);
744 req->out.args[0].value = outarg;
745}
746
747static size_t fuse_send_write(struct fuse_req *req, struct file *file,
748 loff_t pos, size_t count, fl_owner_t owner)
749{
750 struct fuse_file *ff = file->private_data;
751 struct fuse_conn *fc = ff->fc;
752 struct fuse_write_in *inarg = &req->misc.write.in;
753
754 fuse_write_fill(req, ff, pos, count);
755 inarg->flags = file->f_flags;
756 if (owner != NULL) {
757 inarg->write_flags |= FUSE_WRITE_LOCKOWNER;
758 inarg->lock_owner = fuse_lock_owner_id(fc, owner);
759 }
760 fuse_request_send(fc, req);
761 return req->misc.write.out.size;
762}
763
764void fuse_write_update_size(struct inode *inode, loff_t pos)
765{
766 struct fuse_conn *fc = get_fuse_conn(inode);
767 struct fuse_inode *fi = get_fuse_inode(inode);
768
769 spin_lock(&fc->lock);
770 fi->attr_version = ++fc->attr_version;
771 if (pos > inode->i_size)
772 i_size_write(inode, pos);
773 spin_unlock(&fc->lock);
774}
775
776static size_t fuse_send_write_pages(struct fuse_req *req, struct file *file,
777 struct inode *inode, loff_t pos,
778 size_t count)
779{
780 size_t res;
781 unsigned offset;
782 unsigned i;
783
784 for (i = 0; i < req->num_pages; i++)
785 fuse_wait_on_page_writeback(inode, req->pages[i]->index);
786
787 res = fuse_send_write(req, file, pos, count, NULL);
788
789 offset = req->page_offset;
790 count = res;
791 for (i = 0; i < req->num_pages; i++) {
792 struct page *page = req->pages[i];
793
794 if (!req->out.h.error && !offset && count >= PAGE_CACHE_SIZE)
795 SetPageUptodate(page);
796
797 if (count > PAGE_CACHE_SIZE - offset)
798 count -= PAGE_CACHE_SIZE - offset;
799 else
800 count = 0;
801 offset = 0;
802
803 unlock_page(page);
804 page_cache_release(page);
805 }
806
807 return res;
808}
809
810static ssize_t fuse_fill_write_pages(struct fuse_req *req,
811 struct address_space *mapping,
812 struct iov_iter *ii, loff_t pos)
813{
814 struct fuse_conn *fc = get_fuse_conn(mapping->host);
815 unsigned offset = pos & (PAGE_CACHE_SIZE - 1);
816 size_t count = 0;
817 int err;
818
819 req->in.argpages = 1;
820 req->page_offset = offset;
821
822 do {
823 size_t tmp;
824 struct page *page;
825 pgoff_t index = pos >> PAGE_CACHE_SHIFT;
826 size_t bytes = min_t(size_t, PAGE_CACHE_SIZE - offset,
827 iov_iter_count(ii));
828
829 bytes = min_t(size_t, bytes, fc->max_write - count);
830
831 again:
832 err = -EFAULT;
833 if (iov_iter_fault_in_readable(ii, bytes))
834 break;
835
836 err = -ENOMEM;
837 page = grab_cache_page_write_begin(mapping, index, 0);
838 if (!page)
839 break;
840
841 if (mapping_writably_mapped(mapping))
842 flush_dcache_page(page);
843
844 pagefault_disable();
845 tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes);
846 pagefault_enable();
847 flush_dcache_page(page);
848
849 mark_page_accessed(page);
850
851 if (!tmp) {
852 unlock_page(page);
853 page_cache_release(page);
854 bytes = min(bytes, iov_iter_single_seg_count(ii));
855 goto again;
856 }
857
858 err = 0;
859 req->pages[req->num_pages] = page;
860 req->num_pages++;
861
862 iov_iter_advance(ii, tmp);
863 count += tmp;
864 pos += tmp;
865 offset += tmp;
866 if (offset == PAGE_CACHE_SIZE)
867 offset = 0;
868
869 if (!fc->big_writes)
870 break;
871 } while (iov_iter_count(ii) && count < fc->max_write &&
872 req->num_pages < FUSE_MAX_PAGES_PER_REQ && offset == 0);
873
874 return count > 0 ? count : err;
875}
876
877static ssize_t fuse_perform_write(struct file *file,
878 struct address_space *mapping,
879 struct iov_iter *ii, loff_t pos)
880{
881 struct inode *inode = mapping->host;
882 struct fuse_conn *fc = get_fuse_conn(inode);
883 int err = 0;
884 ssize_t res = 0;
885
886 if (is_bad_inode(inode))
887 return -EIO;
888
889 do {
890 struct fuse_req *req;
891 ssize_t count;
892
893 req = fuse_get_req(fc);
894 if (IS_ERR(req)) {
895 err = PTR_ERR(req);
896 break;
897 }
898
899 count = fuse_fill_write_pages(req, mapping, ii, pos);
900 if (count <= 0) {
901 err = count;
902 } else {
903 size_t num_written;
904
905 num_written = fuse_send_write_pages(req, file, inode,
906 pos, count);
907 err = req->out.h.error;
908 if (!err) {
909 res += num_written;
910 pos += num_written;
911
912
913 if (num_written != count)
914 err = -EIO;
915 }
916 }
917 fuse_put_request(fc, req);
918 } while (!err && iov_iter_count(ii));
919
920 if (res > 0)
921 fuse_write_update_size(inode, pos);
922
923 fuse_invalidate_attr(inode);
924
925 return res > 0 ? res : err;
926}
927
928static ssize_t fuse_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
929 unsigned long nr_segs, loff_t pos)
930{
931 struct file *file = iocb->ki_filp;
932 struct address_space *mapping = file->f_mapping;
933 size_t count = 0;
934 size_t ocount = 0;
935 ssize_t written = 0;
936 ssize_t written_buffered = 0;
937 struct inode *inode = mapping->host;
938 ssize_t err;
939 struct iov_iter i;
940 loff_t endbyte = 0;
941
942 WARN_ON(iocb->ki_pos != pos);
943
944 ocount = 0;
945 err = generic_segment_checks(iov, &nr_segs, &ocount, VERIFY_READ);
946 if (err)
947 return err;
948
949 count = ocount;
950 sb_start_write(inode->i_sb);
951 mutex_lock(&inode->i_mutex);
952
953
954 current->backing_dev_info = mapping->backing_dev_info;
955
956 err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode));
957 if (err)
958 goto out;
959
960 if (count == 0)
961 goto out;
962
963 err = file_remove_suid(file);
964 if (err)
965 goto out;
966
967 err = file_update_time(file);
968 if (err)
969 goto out;
970
971 if (file->f_flags & O_DIRECT) {
972 written = generic_file_direct_write(iocb, iov, &nr_segs,
973 pos, &iocb->ki_pos,
974 count, ocount);
975 if (written < 0 || written == count)
976 goto out;
977
978 pos += written;
979 count -= written;
980
981 iov_iter_init(&i, iov, nr_segs, count, written);
982 written_buffered = fuse_perform_write(file, mapping, &i, pos);
983 if (written_buffered < 0) {
984 err = written_buffered;
985 goto out;
986 }
987 endbyte = pos + written_buffered - 1;
988
989 err = filemap_write_and_wait_range(file->f_mapping, pos,
990 endbyte);
991 if (err)
992 goto out;
993
994 invalidate_mapping_pages(file->f_mapping,
995 pos >> PAGE_CACHE_SHIFT,
996 endbyte >> PAGE_CACHE_SHIFT);
997
998 written += written_buffered;
999 iocb->ki_pos = pos + written_buffered;
1000 } else {
1001 iov_iter_init(&i, iov, nr_segs, count, 0);
1002 written = fuse_perform_write(file, mapping, &i, pos);
1003 if (written >= 0)
1004 iocb->ki_pos = pos + written;
1005 }
1006out:
1007 current->backing_dev_info = NULL;
1008 mutex_unlock(&inode->i_mutex);
1009 sb_end_write(inode->i_sb);
1010
1011 return written ? written : err;
1012}
1013
1014static void fuse_release_user_pages(struct fuse_req *req, int write)
1015{
1016 unsigned i;
1017
1018 for (i = 0; i < req->num_pages; i++) {
1019 struct page *page = req->pages[i];
1020 if (write)
1021 set_page_dirty_lock(page);
1022 put_page(page);
1023 }
1024}
1025
1026static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf,
1027 size_t *nbytesp, int write)
1028{
1029 size_t nbytes = *nbytesp;
1030 unsigned long user_addr = (unsigned long) buf;
1031 unsigned offset = user_addr & ~PAGE_MASK;
1032 int npages;
1033
1034
1035 if (segment_eq(get_fs(), KERNEL_DS)) {
1036 if (write)
1037 req->in.args[1].value = (void *) user_addr;
1038 else
1039 req->out.args[0].value = (void *) user_addr;
1040
1041 return 0;
1042 }
1043
1044 nbytes = min_t(size_t, nbytes, FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT);
1045 npages = (nbytes + offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
1046 npages = clamp(npages, 1, FUSE_MAX_PAGES_PER_REQ);
1047 npages = get_user_pages_fast(user_addr, npages, !write, req->pages);
1048 if (npages < 0)
1049 return npages;
1050
1051 req->num_pages = npages;
1052 req->page_offset = offset;
1053
1054 if (write)
1055 req->in.argpages = 1;
1056 else
1057 req->out.argpages = 1;
1058
1059 nbytes = (req->num_pages << PAGE_SHIFT) - req->page_offset;
1060 *nbytesp = min(*nbytesp, nbytes);
1061
1062 return 0;
1063}
1064
1065ssize_t fuse_direct_io(struct file *file, const char __user *buf,
1066 size_t count, loff_t *ppos, int write)
1067{
1068 struct fuse_file *ff = file->private_data;
1069 struct fuse_conn *fc = ff->fc;
1070 size_t nmax = write ? fc->max_write : fc->max_read;
1071 loff_t pos = *ppos;
1072 ssize_t res = 0;
1073 struct fuse_req *req;
1074
1075 req = fuse_get_req(fc);
1076 if (IS_ERR(req))
1077 return PTR_ERR(req);
1078
1079 while (count) {
1080 size_t nres;
1081 fl_owner_t owner = current->files;
1082 size_t nbytes = min(count, nmax);
1083 int err = fuse_get_user_pages(req, buf, &nbytes, write);
1084 if (err) {
1085 res = err;
1086 break;
1087 }
1088
1089 if (write)
1090 nres = fuse_send_write(req, file, pos, nbytes, owner);
1091 else
1092 nres = fuse_send_read(req, file, pos, nbytes, owner);
1093
1094 fuse_release_user_pages(req, !write);
1095 if (req->out.h.error) {
1096 if (!res)
1097 res = req->out.h.error;
1098 break;
1099 } else if (nres > nbytes) {
1100 res = -EIO;
1101 break;
1102 }
1103 count -= nres;
1104 res += nres;
1105 pos += nres;
1106 buf += nres;
1107 if (nres != nbytes)
1108 break;
1109 if (count) {
1110 fuse_put_request(fc, req);
1111 req = fuse_get_req(fc);
1112 if (IS_ERR(req))
1113 break;
1114 }
1115 }
1116 if (!IS_ERR(req))
1117 fuse_put_request(fc, req);
1118 if (res > 0)
1119 *ppos = pos;
1120
1121 return res;
1122}
1123EXPORT_SYMBOL_GPL(fuse_direct_io);
1124
1125static ssize_t fuse_direct_read(struct file *file, char __user *buf,
1126 size_t count, loff_t *ppos)
1127{
1128 ssize_t res;
1129 struct inode *inode = file->f_path.dentry->d_inode;
1130
1131 if (is_bad_inode(inode))
1132 return -EIO;
1133
1134 res = fuse_direct_io(file, buf, count, ppos, 0);
1135
1136 fuse_invalidate_attr(inode);
1137
1138 return res;
1139}
1140
1141static ssize_t __fuse_direct_write(struct file *file, const char __user *buf,
1142 size_t count, loff_t *ppos)
1143{
1144 struct inode *inode = file->f_path.dentry->d_inode;
1145 ssize_t res;
1146
1147 res = generic_write_checks(file, ppos, &count, 0);
1148 if (!res) {
1149 res = fuse_direct_io(file, buf, count, ppos, 1);
1150 if (res > 0)
1151 fuse_write_update_size(inode, *ppos);
1152 }
1153
1154 fuse_invalidate_attr(inode);
1155
1156 return res;
1157}
1158
1159static ssize_t fuse_direct_write(struct file *file, const char __user *buf,
1160 size_t count, loff_t *ppos)
1161{
1162 struct inode *inode = file->f_path.dentry->d_inode;
1163 ssize_t res;
1164
1165 if (is_bad_inode(inode))
1166 return -EIO;
1167
1168
1169 mutex_lock(&inode->i_mutex);
1170 res = __fuse_direct_write(file, buf, count, ppos);
1171 mutex_unlock(&inode->i_mutex);
1172
1173 return res;
1174}
1175
1176static void fuse_writepage_free(struct fuse_conn *fc, struct fuse_req *req)
1177{
1178 __free_page(req->pages[0]);
1179 fuse_file_put(req->ff, false);
1180}
1181
1182static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req)
1183{
1184 struct inode *inode = req->inode;
1185 struct fuse_inode *fi = get_fuse_inode(inode);
1186 struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info;
1187
1188 list_del(&req->writepages_entry);
1189 dec_bdi_stat(bdi, BDI_WRITEBACK);
1190 dec_zone_page_state(req->pages[0], NR_WRITEBACK_TEMP);
1191 bdi_writeout_inc(bdi);
1192 wake_up(&fi->page_waitq);
1193}
1194
1195
1196static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req)
1197__releases(fc->lock)
1198__acquires(fc->lock)
1199{
1200 struct fuse_inode *fi = get_fuse_inode(req->inode);
1201 loff_t size = i_size_read(req->inode);
1202 struct fuse_write_in *inarg = &req->misc.write.in;
1203
1204 if (!fc->connected)
1205 goto out_free;
1206
1207 if (inarg->offset + PAGE_CACHE_SIZE <= size) {
1208 inarg->size = PAGE_CACHE_SIZE;
1209 } else if (inarg->offset < size) {
1210 inarg->size = size & (PAGE_CACHE_SIZE - 1);
1211 } else {
1212
1213 goto out_free;
1214 }
1215
1216 req->in.args[1].size = inarg->size;
1217 fi->writectr++;
1218 fuse_request_send_background_locked(fc, req);
1219 return;
1220
1221 out_free:
1222 fuse_writepage_finish(fc, req);
1223 spin_unlock(&fc->lock);
1224 fuse_writepage_free(fc, req);
1225 fuse_put_request(fc, req);
1226 spin_lock(&fc->lock);
1227}
1228
1229
1230
1231
1232
1233
1234
1235void fuse_flush_writepages(struct inode *inode)
1236__releases(fc->lock)
1237__acquires(fc->lock)
1238{
1239 struct fuse_conn *fc = get_fuse_conn(inode);
1240 struct fuse_inode *fi = get_fuse_inode(inode);
1241 struct fuse_req *req;
1242
1243 while (fi->writectr >= 0 && !list_empty(&fi->queued_writes)) {
1244 req = list_entry(fi->queued_writes.next, struct fuse_req, list);
1245 list_del_init(&req->list);
1246 fuse_send_writepage(fc, req);
1247 }
1248}
1249
1250static void fuse_writepage_end(struct fuse_conn *fc, struct fuse_req *req)
1251{
1252 struct inode *inode = req->inode;
1253 struct fuse_inode *fi = get_fuse_inode(inode);
1254
1255 mapping_set_error(inode->i_mapping, req->out.h.error);
1256 spin_lock(&fc->lock);
1257 fi->writectr--;
1258 fuse_writepage_finish(fc, req);
1259 spin_unlock(&fc->lock);
1260 fuse_writepage_free(fc, req);
1261}
1262
1263static int fuse_writepage_locked(struct page *page)
1264{
1265 struct address_space *mapping = page->mapping;
1266 struct inode *inode = mapping->host;
1267 struct fuse_conn *fc = get_fuse_conn(inode);
1268 struct fuse_inode *fi = get_fuse_inode(inode);
1269 struct fuse_req *req;
1270 struct fuse_file *ff;
1271 struct page *tmp_page;
1272
1273 set_page_writeback(page);
1274
1275 req = fuse_request_alloc_nofs();
1276 if (!req)
1277 goto err;
1278
1279 tmp_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
1280 if (!tmp_page)
1281 goto err_free;
1282
1283 spin_lock(&fc->lock);
1284 BUG_ON(list_empty(&fi->write_files));
1285 ff = list_entry(fi->write_files.next, struct fuse_file, write_entry);
1286 req->ff = fuse_file_get(ff);
1287 spin_unlock(&fc->lock);
1288
1289 fuse_write_fill(req, ff, page_offset(page), 0);
1290
1291 copy_highpage(tmp_page, page);
1292 req->misc.write.in.write_flags |= FUSE_WRITE_CACHE;
1293 req->in.argpages = 1;
1294 req->num_pages = 1;
1295 req->pages[0] = tmp_page;
1296 req->page_offset = 0;
1297 req->end = fuse_writepage_end;
1298 req->inode = inode;
1299
1300 inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK);
1301 inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP);
1302 end_page_writeback(page);
1303
1304 spin_lock(&fc->lock);
1305 list_add(&req->writepages_entry, &fi->writepages);
1306 list_add_tail(&req->list, &fi->queued_writes);
1307 fuse_flush_writepages(inode);
1308 spin_unlock(&fc->lock);
1309
1310 return 0;
1311
1312err_free:
1313 fuse_request_free(req);
1314err:
1315 end_page_writeback(page);
1316 return -ENOMEM;
1317}
1318
1319static int fuse_writepage(struct page *page, struct writeback_control *wbc)
1320{
1321 int err;
1322
1323 err = fuse_writepage_locked(page);
1324 unlock_page(page);
1325
1326 return err;
1327}
1328
1329static int fuse_launder_page(struct page *page)
1330{
1331 int err = 0;
1332 if (clear_page_dirty_for_io(page)) {
1333 struct inode *inode = page->mapping->host;
1334 err = fuse_writepage_locked(page);
1335 if (!err)
1336 fuse_wait_on_page_writeback(inode, page->index);
1337 }
1338 return err;
1339}
1340
1341
1342
1343
1344
1345static void fuse_vma_close(struct vm_area_struct *vma)
1346{
1347 filemap_write_and_wait(vma->vm_file->f_mapping);
1348}
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365static int fuse_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
1366{
1367 struct page *page = vmf->page;
1368
1369
1370
1371
1372 struct inode *inode = vma->vm_file->f_mapping->host;
1373
1374 fuse_wait_on_page_writeback(inode, page->index);
1375 return 0;
1376}
1377
1378static const struct vm_operations_struct fuse_file_vm_ops = {
1379 .close = fuse_vma_close,
1380 .fault = filemap_fault,
1381 .page_mkwrite = fuse_page_mkwrite,
1382};
1383
1384static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)
1385{
1386 if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE)) {
1387 struct inode *inode = file->f_dentry->d_inode;
1388 struct fuse_conn *fc = get_fuse_conn(inode);
1389 struct fuse_inode *fi = get_fuse_inode(inode);
1390 struct fuse_file *ff = file->private_data;
1391
1392
1393
1394
1395 spin_lock(&fc->lock);
1396 if (list_empty(&ff->write_entry))
1397 list_add(&ff->write_entry, &fi->write_files);
1398 spin_unlock(&fc->lock);
1399 }
1400 file_accessed(file);
1401 vma->vm_ops = &fuse_file_vm_ops;
1402 return 0;
1403}
1404
1405static int fuse_direct_mmap(struct file *file, struct vm_area_struct *vma)
1406{
1407
1408 if (vma->vm_flags & VM_MAYSHARE)
1409 return -ENODEV;
1410
1411 invalidate_inode_pages2(file->f_mapping);
1412
1413 return generic_file_mmap(file, vma);
1414}
1415
1416static int convert_fuse_file_lock(const struct fuse_file_lock *ffl,
1417 struct file_lock *fl)
1418{
1419 switch (ffl->type) {
1420 case F_UNLCK:
1421 break;
1422
1423 case F_RDLCK:
1424 case F_WRLCK:
1425 if (ffl->start > OFFSET_MAX || ffl->end > OFFSET_MAX ||
1426 ffl->end < ffl->start)
1427 return -EIO;
1428
1429 fl->fl_start = ffl->start;
1430 fl->fl_end = ffl->end;
1431 fl->fl_pid = ffl->pid;
1432 break;
1433
1434 default:
1435 return -EIO;
1436 }
1437 fl->fl_type = ffl->type;
1438 return 0;
1439}
1440
1441static void fuse_lk_fill(struct fuse_req *req, struct file *file,
1442 const struct file_lock *fl, int opcode, pid_t pid,
1443 int flock)
1444{
1445 struct inode *inode = file->f_path.dentry->d_inode;
1446 struct fuse_conn *fc = get_fuse_conn(inode);
1447 struct fuse_file *ff = file->private_data;
1448 struct fuse_lk_in *arg = &req->misc.lk_in;
1449
1450 arg->fh = ff->fh;
1451 arg->owner = fuse_lock_owner_id(fc, fl->fl_owner);
1452 arg->lk.start = fl->fl_start;
1453 arg->lk.end = fl->fl_end;
1454 arg->lk.type = fl->fl_type;
1455 arg->lk.pid = pid;
1456 if (flock)
1457 arg->lk_flags |= FUSE_LK_FLOCK;
1458 req->in.h.opcode = opcode;
1459 req->in.h.nodeid = get_node_id(inode);
1460 req->in.numargs = 1;
1461 req->in.args[0].size = sizeof(*arg);
1462 req->in.args[0].value = arg;
1463}
1464
1465static int fuse_getlk(struct file *file, struct file_lock *fl)
1466{
1467 struct inode *inode = file->f_path.dentry->d_inode;
1468 struct fuse_conn *fc = get_fuse_conn(inode);
1469 struct fuse_req *req;
1470 struct fuse_lk_out outarg;
1471 int err;
1472
1473 req = fuse_get_req(fc);
1474 if (IS_ERR(req))
1475 return PTR_ERR(req);
1476
1477 fuse_lk_fill(req, file, fl, FUSE_GETLK, 0, 0);
1478 req->out.numargs = 1;
1479 req->out.args[0].size = sizeof(outarg);
1480 req->out.args[0].value = &outarg;
1481 fuse_request_send(fc, req);
1482 err = req->out.h.error;
1483 fuse_put_request(fc, req);
1484 if (!err)
1485 err = convert_fuse_file_lock(&outarg.lk, fl);
1486
1487 return err;
1488}
1489
1490static int fuse_setlk(struct file *file, struct file_lock *fl, int flock)
1491{
1492 struct inode *inode = file->f_path.dentry->d_inode;
1493 struct fuse_conn *fc = get_fuse_conn(inode);
1494 struct fuse_req *req;
1495 int opcode = (fl->fl_flags & FL_SLEEP) ? FUSE_SETLKW : FUSE_SETLK;
1496 pid_t pid = fl->fl_type != F_UNLCK ? current->tgid : 0;
1497 int err;
1498
1499 if (fl->fl_lmops && fl->fl_lmops->lm_grant) {
1500
1501 return -ENOLCK;
1502 }
1503
1504
1505 if (fl->fl_flags & FL_CLOSE)
1506 return 0;
1507
1508 req = fuse_get_req(fc);
1509 if (IS_ERR(req))
1510 return PTR_ERR(req);
1511
1512 fuse_lk_fill(req, file, fl, opcode, pid, flock);
1513 fuse_request_send(fc, req);
1514 err = req->out.h.error;
1515
1516 if (err == -EINTR)
1517 err = -ERESTARTSYS;
1518 fuse_put_request(fc, req);
1519 return err;
1520}
1521
1522static int fuse_file_lock(struct file *file, int cmd, struct file_lock *fl)
1523{
1524 struct inode *inode = file->f_path.dentry->d_inode;
1525 struct fuse_conn *fc = get_fuse_conn(inode);
1526 int err;
1527
1528 if (cmd == F_CANCELLK) {
1529 err = 0;
1530 } else if (cmd == F_GETLK) {
1531 if (fc->no_lock) {
1532 posix_test_lock(file, fl);
1533 err = 0;
1534 } else
1535 err = fuse_getlk(file, fl);
1536 } else {
1537 if (fc->no_lock)
1538 err = posix_lock_file(file, fl, NULL);
1539 else
1540 err = fuse_setlk(file, fl, 0);
1541 }
1542 return err;
1543}
1544
1545static int fuse_file_flock(struct file *file, int cmd, struct file_lock *fl)
1546{
1547 struct inode *inode = file->f_path.dentry->d_inode;
1548 struct fuse_conn *fc = get_fuse_conn(inode);
1549 int err;
1550
1551 if (fc->no_flock) {
1552 err = flock_lock_file_wait(file, fl);
1553 } else {
1554 struct fuse_file *ff = file->private_data;
1555
1556
1557 fl->fl_owner = (fl_owner_t) file;
1558 ff->flock = true;
1559 err = fuse_setlk(file, fl, 1);
1560 }
1561
1562 return err;
1563}
1564
1565static sector_t fuse_bmap(struct address_space *mapping, sector_t block)
1566{
1567 struct inode *inode = mapping->host;
1568 struct fuse_conn *fc = get_fuse_conn(inode);
1569 struct fuse_req *req;
1570 struct fuse_bmap_in inarg;
1571 struct fuse_bmap_out outarg;
1572 int err;
1573
1574 if (!inode->i_sb->s_bdev || fc->no_bmap)
1575 return 0;
1576
1577 req = fuse_get_req(fc);
1578 if (IS_ERR(req))
1579 return 0;
1580
1581 memset(&inarg, 0, sizeof(inarg));
1582 inarg.block = block;
1583 inarg.blocksize = inode->i_sb->s_blocksize;
1584 req->in.h.opcode = FUSE_BMAP;
1585 req->in.h.nodeid = get_node_id(inode);
1586 req->in.numargs = 1;
1587 req->in.args[0].size = sizeof(inarg);
1588 req->in.args[0].value = &inarg;
1589 req->out.numargs = 1;
1590 req->out.args[0].size = sizeof(outarg);
1591 req->out.args[0].value = &outarg;
1592 fuse_request_send(fc, req);
1593 err = req->out.h.error;
1594 fuse_put_request(fc, req);
1595 if (err == -ENOSYS)
1596 fc->no_bmap = 1;
1597
1598 return err ? 0 : outarg.block;
1599}
1600
1601static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
1602{
1603 loff_t retval;
1604 struct inode *inode = file->f_path.dentry->d_inode;
1605
1606
1607 if (origin == SEEK_CUR || origin == SEEK_SET)
1608 return generic_file_llseek(file, offset, origin);
1609
1610 mutex_lock(&inode->i_mutex);
1611 retval = fuse_update_attributes(inode, NULL, file, NULL);
1612 if (!retval)
1613 retval = generic_file_llseek(file, offset, origin);
1614 mutex_unlock(&inode->i_mutex);
1615
1616 return retval;
1617}
1618
1619static int fuse_ioctl_copy_user(struct page **pages, struct iovec *iov,
1620 unsigned int nr_segs, size_t bytes, bool to_user)
1621{
1622 struct iov_iter ii;
1623 int page_idx = 0;
1624
1625 if (!bytes)
1626 return 0;
1627
1628 iov_iter_init(&ii, iov, nr_segs, bytes, 0);
1629
1630 while (iov_iter_count(&ii)) {
1631 struct page *page = pages[page_idx++];
1632 size_t todo = min_t(size_t, PAGE_SIZE, iov_iter_count(&ii));
1633 void *kaddr;
1634
1635 kaddr = kmap(page);
1636
1637 while (todo) {
1638 char __user *uaddr = ii.iov->iov_base + ii.iov_offset;
1639 size_t iov_len = ii.iov->iov_len - ii.iov_offset;
1640 size_t copy = min(todo, iov_len);
1641 size_t left;
1642
1643 if (!to_user)
1644 left = copy_from_user(kaddr, uaddr, copy);
1645 else
1646 left = copy_to_user(uaddr, kaddr, copy);
1647
1648 if (unlikely(left))
1649 return -EFAULT;
1650
1651 iov_iter_advance(&ii, copy);
1652 todo -= copy;
1653 kaddr += copy;
1654 }
1655
1656 kunmap(page);
1657 }
1658
1659 return 0;
1660}
1661
1662
1663
1664
1665
1666
1667
1668static int fuse_copy_ioctl_iovec_old(struct iovec *dst, void *src,
1669 size_t transferred, unsigned count,
1670 bool is_compat)
1671{
1672#ifdef CONFIG_COMPAT
1673 if (count * sizeof(struct compat_iovec) == transferred) {
1674 struct compat_iovec *ciov = src;
1675 unsigned i;
1676
1677
1678
1679
1680
1681
1682 if (!is_compat)
1683 return -EINVAL;
1684
1685 for (i = 0; i < count; i++) {
1686 dst[i].iov_base = compat_ptr(ciov[i].iov_base);
1687 dst[i].iov_len = ciov[i].iov_len;
1688 }
1689 return 0;
1690 }
1691#endif
1692
1693 if (count * sizeof(struct iovec) != transferred)
1694 return -EIO;
1695
1696 memcpy(dst, src, transferred);
1697 return 0;
1698}
1699
1700
1701static int fuse_verify_ioctl_iov(struct iovec *iov, size_t count)
1702{
1703 size_t n;
1704 u32 max = FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT;
1705
1706 for (n = 0; n < count; n++, iov++) {
1707 if (iov->iov_len > (size_t) max)
1708 return -ENOMEM;
1709 max -= iov->iov_len;
1710 }
1711 return 0;
1712}
1713
1714static int fuse_copy_ioctl_iovec(struct fuse_conn *fc, struct iovec *dst,
1715 void *src, size_t transferred, unsigned count,
1716 bool is_compat)
1717{
1718 unsigned i;
1719 struct fuse_ioctl_iovec *fiov = src;
1720
1721 if (fc->minor < 16) {
1722 return fuse_copy_ioctl_iovec_old(dst, src, transferred,
1723 count, is_compat);
1724 }
1725
1726 if (count * sizeof(struct fuse_ioctl_iovec) != transferred)
1727 return -EIO;
1728
1729 for (i = 0; i < count; i++) {
1730
1731 if (fiov[i].base != (unsigned long) fiov[i].base ||
1732 fiov[i].len != (unsigned long) fiov[i].len)
1733 return -EIO;
1734
1735 dst[i].iov_base = (void __user *) (unsigned long) fiov[i].base;
1736 dst[i].iov_len = (size_t) fiov[i].len;
1737
1738#ifdef CONFIG_COMPAT
1739 if (is_compat &&
1740 (ptr_to_compat(dst[i].iov_base) != fiov[i].base ||
1741 (compat_size_t) dst[i].iov_len != fiov[i].len))
1742 return -EIO;
1743#endif
1744 }
1745
1746 return 0;
1747}
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
1797 unsigned int flags)
1798{
1799 struct fuse_file *ff = file->private_data;
1800 struct fuse_conn *fc = ff->fc;
1801 struct fuse_ioctl_in inarg = {
1802 .fh = ff->fh,
1803 .cmd = cmd,
1804 .arg = arg,
1805 .flags = flags
1806 };
1807 struct fuse_ioctl_out outarg;
1808 struct fuse_req *req = NULL;
1809 struct page **pages = NULL;
1810 struct iovec *iov_page = NULL;
1811 struct iovec *in_iov = NULL, *out_iov = NULL;
1812 unsigned int in_iovs = 0, out_iovs = 0, num_pages = 0, max_pages;
1813 size_t in_size, out_size, transferred;
1814 int err;
1815
1816#if BITS_PER_LONG == 32
1817 inarg.flags |= FUSE_IOCTL_32BIT;
1818#else
1819 if (flags & FUSE_IOCTL_COMPAT)
1820 inarg.flags |= FUSE_IOCTL_32BIT;
1821#endif
1822
1823
1824 BUILD_BUG_ON(sizeof(struct fuse_ioctl_iovec) * FUSE_IOCTL_MAX_IOV > PAGE_SIZE);
1825
1826 err = -ENOMEM;
1827 pages = kcalloc(FUSE_MAX_PAGES_PER_REQ, sizeof(pages[0]), GFP_KERNEL);
1828 iov_page = (struct iovec *) __get_free_page(GFP_KERNEL);
1829 if (!pages || !iov_page)
1830 goto out;
1831
1832
1833
1834
1835
1836 if (!(flags & FUSE_IOCTL_UNRESTRICTED)) {
1837 struct iovec *iov = iov_page;
1838
1839 iov->iov_base = (void __user *)arg;
1840 iov->iov_len = _IOC_SIZE(cmd);
1841
1842 if (_IOC_DIR(cmd) & _IOC_WRITE) {
1843 in_iov = iov;
1844 in_iovs = 1;
1845 }
1846
1847 if (_IOC_DIR(cmd) & _IOC_READ) {
1848 out_iov = iov;
1849 out_iovs = 1;
1850 }
1851 }
1852
1853 retry:
1854 inarg.in_size = in_size = iov_length(in_iov, in_iovs);
1855 inarg.out_size = out_size = iov_length(out_iov, out_iovs);
1856
1857
1858
1859
1860
1861 out_size = max_t(size_t, out_size, PAGE_SIZE);
1862 max_pages = DIV_ROUND_UP(max(in_size, out_size), PAGE_SIZE);
1863
1864
1865 err = -ENOMEM;
1866 if (max_pages > FUSE_MAX_PAGES_PER_REQ)
1867 goto out;
1868 while (num_pages < max_pages) {
1869 pages[num_pages] = alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
1870 if (!pages[num_pages])
1871 goto out;
1872 num_pages++;
1873 }
1874
1875 req = fuse_get_req(fc);
1876 if (IS_ERR(req)) {
1877 err = PTR_ERR(req);
1878 req = NULL;
1879 goto out;
1880 }
1881 memcpy(req->pages, pages, sizeof(req->pages[0]) * num_pages);
1882 req->num_pages = num_pages;
1883
1884
1885 req->in.h.opcode = FUSE_IOCTL;
1886 req->in.h.nodeid = ff->nodeid;
1887 req->in.numargs = 1;
1888 req->in.args[0].size = sizeof(inarg);
1889 req->in.args[0].value = &inarg;
1890 if (in_size) {
1891 req->in.numargs++;
1892 req->in.args[1].size = in_size;
1893 req->in.argpages = 1;
1894
1895 err = fuse_ioctl_copy_user(pages, in_iov, in_iovs, in_size,
1896 false);
1897 if (err)
1898 goto out;
1899 }
1900
1901 req->out.numargs = 2;
1902 req->out.args[0].size = sizeof(outarg);
1903 req->out.args[0].value = &outarg;
1904 req->out.args[1].size = out_size;
1905 req->out.argpages = 1;
1906 req->out.argvar = 1;
1907
1908 fuse_request_send(fc, req);
1909 err = req->out.h.error;
1910 transferred = req->out.args[1].size;
1911 fuse_put_request(fc, req);
1912 req = NULL;
1913 if (err)
1914 goto out;
1915
1916
1917 if (outarg.flags & FUSE_IOCTL_RETRY) {
1918 void *vaddr;
1919
1920
1921 err = -EIO;
1922 if (!(flags & FUSE_IOCTL_UNRESTRICTED))
1923 goto out;
1924
1925 in_iovs = outarg.in_iovs;
1926 out_iovs = outarg.out_iovs;
1927
1928
1929
1930
1931
1932 err = -ENOMEM;
1933 if (in_iovs > FUSE_IOCTL_MAX_IOV ||
1934 out_iovs > FUSE_IOCTL_MAX_IOV ||
1935 in_iovs + out_iovs > FUSE_IOCTL_MAX_IOV)
1936 goto out;
1937
1938 vaddr = kmap_atomic(pages[0]);
1939 err = fuse_copy_ioctl_iovec(fc, iov_page, vaddr,
1940 transferred, in_iovs + out_iovs,
1941 (flags & FUSE_IOCTL_COMPAT) != 0);
1942 kunmap_atomic(vaddr);
1943 if (err)
1944 goto out;
1945
1946 in_iov = iov_page;
1947 out_iov = in_iov + in_iovs;
1948
1949 err = fuse_verify_ioctl_iov(in_iov, in_iovs);
1950 if (err)
1951 goto out;
1952
1953 err = fuse_verify_ioctl_iov(out_iov, out_iovs);
1954 if (err)
1955 goto out;
1956
1957 goto retry;
1958 }
1959
1960 err = -EIO;
1961 if (transferred > inarg.out_size)
1962 goto out;
1963
1964 err = fuse_ioctl_copy_user(pages, out_iov, out_iovs, transferred, true);
1965 out:
1966 if (req)
1967 fuse_put_request(fc, req);
1968 free_page((unsigned long) iov_page);
1969 while (num_pages)
1970 __free_page(pages[--num_pages]);
1971 kfree(pages);
1972
1973 return err ? err : outarg.result;
1974}
1975EXPORT_SYMBOL_GPL(fuse_do_ioctl);
1976
1977long fuse_ioctl_common(struct file *file, unsigned int cmd,
1978 unsigned long arg, unsigned int flags)
1979{
1980 struct inode *inode = file->f_dentry->d_inode;
1981 struct fuse_conn *fc = get_fuse_conn(inode);
1982
1983 if (!fuse_allow_task(fc, current))
1984 return -EACCES;
1985
1986 if (is_bad_inode(inode))
1987 return -EIO;
1988
1989 return fuse_do_ioctl(file, cmd, arg, flags);
1990}
1991
1992static long fuse_file_ioctl(struct file *file, unsigned int cmd,
1993 unsigned long arg)
1994{
1995 return fuse_ioctl_common(file, cmd, arg, 0);
1996}
1997
1998static long fuse_file_compat_ioctl(struct file *file, unsigned int cmd,
1999 unsigned long arg)
2000{
2001 return fuse_ioctl_common(file, cmd, arg, FUSE_IOCTL_COMPAT);
2002}
2003
2004
2005
2006
2007
2008
2009static struct rb_node **fuse_find_polled_node(struct fuse_conn *fc, u64 kh,
2010 struct rb_node **parent_out)
2011{
2012 struct rb_node **link = &fc->polled_files.rb_node;
2013 struct rb_node *last = NULL;
2014
2015 while (*link) {
2016 struct fuse_file *ff;
2017
2018 last = *link;
2019 ff = rb_entry(last, struct fuse_file, polled_node);
2020
2021 if (kh < ff->kh)
2022 link = &last->rb_left;
2023 else if (kh > ff->kh)
2024 link = &last->rb_right;
2025 else
2026 return link;
2027 }
2028
2029 if (parent_out)
2030 *parent_out = last;
2031 return link;
2032}
2033
2034
2035
2036
2037
2038
2039
2040static void fuse_register_polled_file(struct fuse_conn *fc,
2041 struct fuse_file *ff)
2042{
2043 spin_lock(&fc->lock);
2044 if (RB_EMPTY_NODE(&ff->polled_node)) {
2045 struct rb_node **link, *parent;
2046
2047 link = fuse_find_polled_node(fc, ff->kh, &parent);
2048 BUG_ON(*link);
2049 rb_link_node(&ff->polled_node, parent, link);
2050 rb_insert_color(&ff->polled_node, &fc->polled_files);
2051 }
2052 spin_unlock(&fc->lock);
2053}
2054
2055unsigned fuse_file_poll(struct file *file, poll_table *wait)
2056{
2057 struct fuse_file *ff = file->private_data;
2058 struct fuse_conn *fc = ff->fc;
2059 struct fuse_poll_in inarg = { .fh = ff->fh, .kh = ff->kh };
2060 struct fuse_poll_out outarg;
2061 struct fuse_req *req;
2062 int err;
2063
2064 if (fc->no_poll)
2065 return DEFAULT_POLLMASK;
2066
2067 poll_wait(file, &ff->poll_wait, wait);
2068
2069
2070
2071
2072
2073 if (waitqueue_active(&ff->poll_wait)) {
2074 inarg.flags |= FUSE_POLL_SCHEDULE_NOTIFY;
2075 fuse_register_polled_file(fc, ff);
2076 }
2077
2078 req = fuse_get_req(fc);
2079 if (IS_ERR(req))
2080 return POLLERR;
2081
2082 req->in.h.opcode = FUSE_POLL;
2083 req->in.h.nodeid = ff->nodeid;
2084 req->in.numargs = 1;
2085 req->in.args[0].size = sizeof(inarg);
2086 req->in.args[0].value = &inarg;
2087 req->out.numargs = 1;
2088 req->out.args[0].size = sizeof(outarg);
2089 req->out.args[0].value = &outarg;
2090 fuse_request_send(fc, req);
2091 err = req->out.h.error;
2092 fuse_put_request(fc, req);
2093
2094 if (!err)
2095 return outarg.revents;
2096 if (err == -ENOSYS) {
2097 fc->no_poll = 1;
2098 return DEFAULT_POLLMASK;
2099 }
2100 return POLLERR;
2101}
2102EXPORT_SYMBOL_GPL(fuse_file_poll);
2103
2104
2105
2106
2107
2108int fuse_notify_poll_wakeup(struct fuse_conn *fc,
2109 struct fuse_notify_poll_wakeup_out *outarg)
2110{
2111 u64 kh = outarg->kh;
2112 struct rb_node **link;
2113
2114 spin_lock(&fc->lock);
2115
2116 link = fuse_find_polled_node(fc, kh, NULL);
2117 if (*link) {
2118 struct fuse_file *ff;
2119
2120 ff = rb_entry(*link, struct fuse_file, polled_node);
2121 wake_up_interruptible_sync(&ff->poll_wait);
2122 }
2123
2124 spin_unlock(&fc->lock);
2125 return 0;
2126}
2127
2128static ssize_t fuse_loop_dio(struct file *filp, const struct iovec *iov,
2129 unsigned long nr_segs, loff_t *ppos, int rw)
2130{
2131 const struct iovec *vector = iov;
2132 ssize_t ret = 0;
2133
2134 while (nr_segs > 0) {
2135 void __user *base;
2136 size_t len;
2137 ssize_t nr;
2138
2139 base = vector->iov_base;
2140 len = vector->iov_len;
2141 vector++;
2142 nr_segs--;
2143
2144 if (rw == WRITE)
2145 nr = __fuse_direct_write(filp, base, len, ppos);
2146 else
2147 nr = fuse_direct_read(filp, base, len, ppos);
2148
2149 if (nr < 0) {
2150 if (!ret)
2151 ret = nr;
2152 break;
2153 }
2154 ret += nr;
2155 if (nr != len)
2156 break;
2157 }
2158
2159 return ret;
2160}
2161
2162
2163static ssize_t
2164fuse_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
2165 loff_t offset, unsigned long nr_segs)
2166{
2167 ssize_t ret = 0;
2168 struct file *file = NULL;
2169 loff_t pos = 0;
2170
2171 file = iocb->ki_filp;
2172 pos = offset;
2173
2174 ret = fuse_loop_dio(file, iov, nr_segs, &pos, rw);
2175
2176 return ret;
2177}
2178
2179long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
2180 loff_t length)
2181{
2182 struct fuse_file *ff = file->private_data;
2183 struct fuse_conn *fc = ff->fc;
2184 struct fuse_req *req;
2185 struct fuse_fallocate_in inarg = {
2186 .fh = ff->fh,
2187 .offset = offset,
2188 .length = length,
2189 .mode = mode
2190 };
2191 int err;
2192
2193 if (fc->no_fallocate)
2194 return -EOPNOTSUPP;
2195
2196 req = fuse_get_req(fc);
2197 if (IS_ERR(req))
2198 return PTR_ERR(req);
2199
2200 req->in.h.opcode = FUSE_FALLOCATE;
2201 req->in.h.nodeid = ff->nodeid;
2202 req->in.numargs = 1;
2203 req->in.args[0].size = sizeof(inarg);
2204 req->in.args[0].value = &inarg;
2205 fuse_request_send(fc, req);
2206 err = req->out.h.error;
2207 if (err == -ENOSYS) {
2208 fc->no_fallocate = 1;
2209 err = -EOPNOTSUPP;
2210 }
2211 fuse_put_request(fc, req);
2212
2213 return err;
2214}
2215EXPORT_SYMBOL_GPL(fuse_file_fallocate);
2216
2217static const struct file_operations fuse_file_operations = {
2218 .llseek = fuse_file_llseek,
2219 .read = do_sync_read,
2220 .aio_read = fuse_file_aio_read,
2221 .write = do_sync_write,
2222 .aio_write = fuse_file_aio_write,
2223 .mmap = fuse_file_mmap,
2224 .open = fuse_open,
2225 .flush = fuse_flush,
2226 .release = fuse_release,
2227 .fsync = fuse_fsync,
2228 .lock = fuse_file_lock,
2229 .flock = fuse_file_flock,
2230 .splice_read = generic_file_splice_read,
2231 .unlocked_ioctl = fuse_file_ioctl,
2232 .compat_ioctl = fuse_file_compat_ioctl,
2233 .poll = fuse_file_poll,
2234 .fallocate = fuse_file_fallocate,
2235};
2236
2237static const struct file_operations fuse_direct_io_file_operations = {
2238 .llseek = fuse_file_llseek,
2239 .read = fuse_direct_read,
2240 .write = fuse_direct_write,
2241 .mmap = fuse_direct_mmap,
2242 .open = fuse_open,
2243 .flush = fuse_flush,
2244 .release = fuse_release,
2245 .fsync = fuse_fsync,
2246 .lock = fuse_file_lock,
2247 .flock = fuse_file_flock,
2248 .unlocked_ioctl = fuse_file_ioctl,
2249 .compat_ioctl = fuse_file_compat_ioctl,
2250 .poll = fuse_file_poll,
2251 .fallocate = fuse_file_fallocate,
2252
2253};
2254
2255static const struct address_space_operations fuse_file_aops = {
2256 .readpage = fuse_readpage,
2257 .writepage = fuse_writepage,
2258 .launder_page = fuse_launder_page,
2259 .readpages = fuse_readpages,
2260 .set_page_dirty = __set_page_dirty_nobuffers,
2261 .bmap = fuse_bmap,
2262 .direct_IO = fuse_direct_IO,
2263};
2264
2265void fuse_init_file_inode(struct inode *inode)
2266{
2267 inode->i_fop = &fuse_file_operations;
2268 inode->i_data.a_ops = &fuse_file_aops;
2269}
2270