1 /* 2 FUSE: Filesystem in Userspace 3 Copyright (C) 2001-2006 Miklos Szeredi <miklos@szeredi.hu> 4 5 This program can be distributed under the terms of the GNU GPL. 6 See the file COPYING. 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 16 static const struct file_operations fuse_direct_io_file_operations; 17 18 static int fuse_send_open(struct inode *inode, struct file *file, int isdir, 19 struct fuse_open_out *outargp) 20 { 21 struct fuse_conn *fc = get_fuse_conn(inode); 22 struct fuse_open_in inarg; 23 struct fuse_req *req; 24 int err; 25 26 req = fuse_get_req(fc); 27 if (IS_ERR(req)) 28 return PTR_ERR(req); 29 30 memset(&inarg, 0, sizeof(inarg)); 31 inarg.flags = file->f_flags & ~(O_CREAT | O_EXCL | O_NOCTTY); 32 if (!fc->atomic_o_trunc) 33 inarg.flags &= ~O_TRUNC; 34 req->in.h.opcode = isdir ? FUSE_OPENDIR : FUSE_OPEN; 35 req->in.h.nodeid = get_node_id(inode); 36 req->in.numargs = 1; 37 req->in.args[0].size = sizeof(inarg); 38 req->in.args[0].value = &inarg; 39 req->out.numargs = 1; 40 req->out.args[0].size = sizeof(*outargp); 41 req->out.args[0].value = outargp; 42 request_send(fc, req); 43 err = req->out.h.error; 44 fuse_put_request(fc, req); 45 46 return err; 47 } 48 49 struct fuse_file *fuse_file_alloc(void) 50 { 51 struct fuse_file *ff; 52 ff = kmalloc(sizeof(struct fuse_file), GFP_KERNEL); 53 if (ff) { 54 ff->reserved_req = fuse_request_alloc(); 55 if (!ff->reserved_req) { 56 kfree(ff); 57 ff = NULL; 58 } else { 59 INIT_LIST_HEAD(&ff->write_entry); 60 atomic_set(&ff->count, 0); 61 } 62 } 63 return ff; 64 } 65 66 void fuse_file_free(struct fuse_file *ff) 67 { 68 fuse_request_free(ff->reserved_req); 69 kfree(ff); 70 } 71 72 static struct fuse_file *fuse_file_get(struct fuse_file *ff) 73 { 74 atomic_inc(&ff->count); 75 return ff; 76 } 77 78 static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req) 79 { 80 dput(req->misc.release.dentry); 81 mntput(req->misc.release.vfsmount); 82 fuse_put_request(fc, req); 83 } 84 85 static void fuse_file_put(struct fuse_file *ff) 86 { 87 if (atomic_dec_and_test(&ff->count)) { 88 struct fuse_req *req = ff->reserved_req; 89 struct inode *inode = req->misc.release.dentry->d_inode; 90 struct fuse_conn *fc = get_fuse_conn(inode); 91 req->end = fuse_release_end; 92 request_send_background(fc, req); 93 kfree(ff); 94 } 95 } 96 97 void fuse_finish_open(struct inode *inode, struct file *file, 98 struct fuse_file *ff, struct fuse_open_out *outarg) 99 { 100 if (outarg->open_flags & FOPEN_DIRECT_IO) 101 file->f_op = &fuse_direct_io_file_operations; 102 if (!(outarg->open_flags & FOPEN_KEEP_CACHE)) 103 invalidate_inode_pages2(inode->i_mapping); 104 if (outarg->open_flags & FOPEN_NONSEEKABLE) 105 nonseekable_open(inode, file); 106 ff->fh = outarg->fh; 107 file->private_data = fuse_file_get(ff); 108 } 109 110 int fuse_open_common(struct inode *inode, struct file *file, int isdir) 111 { 112 struct fuse_open_out outarg; 113 struct fuse_file *ff; 114 int err; 115 116 /* VFS checks this, but only _after_ ->open() */ 117 if (file->f_flags & O_DIRECT) 118 return -EINVAL; 119 120 err = generic_file_open(inode, file); 121 if (err) 122 return err; 123 124 ff = fuse_file_alloc(); 125 if (!ff) 126 return -ENOMEM; 127 128 err = fuse_send_open(inode, file, isdir, &outarg); 129 if (err) 130 fuse_file_free(ff); 131 else { 132 if (isdir) 133 outarg.open_flags &= ~FOPEN_DIRECT_IO; 134 fuse_finish_open(inode, file, ff, &outarg); 135 } 136 137 return err; 138 } 139 140 void fuse_release_fill(struct fuse_file *ff, u64 nodeid, int flags, int opcode) 141 { 142 struct fuse_req *req = ff->reserved_req; 143 struct fuse_release_in *inarg = &req->misc.release.in; 144 145 inarg->fh = ff->fh; 146 inarg->flags = flags; 147 req->in.h.opcode = opcode; 148 req->in.h.nodeid = nodeid; 149 req->in.numargs = 1; 150 req->in.args[0].size = sizeof(struct fuse_release_in); 151 req->in.args[0].value = inarg; 152 } 153 154 int fuse_release_common(struct inode *inode, struct file *file, int isdir) 155 { 156 struct fuse_file *ff = file->private_data; 157 if (ff) { 158 struct fuse_conn *fc = get_fuse_conn(inode); 159 struct fuse_req *req = ff->reserved_req; 160 161 fuse_release_fill(ff, get_node_id(inode), file->f_flags, 162 isdir ? FUSE_RELEASEDIR : FUSE_RELEASE); 163 164 /* Hold vfsmount and dentry until release is finished */ 165 req->misc.release.vfsmount = mntget(file->f_path.mnt); 166 req->misc.release.dentry = dget(file->f_path.dentry); 167 168 spin_lock(&fc->lock); 169 list_del(&ff->write_entry); 170 spin_unlock(&fc->lock); 171 /* 172 * Normally this will send the RELEASE request, 173 * however if some asynchronous READ or WRITE requests 174 * are outstanding, the sending will be delayed 175 */ 176 fuse_file_put(ff); 177 } 178 179 /* Return value is ignored by VFS */ 180 return 0; 181 } 182 183 static int fuse_open(struct inode *inode, struct file *file) 184 { 185 return fuse_open_common(inode, file, 0); 186 } 187 188 static int fuse_release(struct inode *inode, struct file *file) 189 { 190 return fuse_release_common(inode, file, 0); 191 } 192 193 /* 194 * Scramble the ID space with XTEA, so that the value of the files_struct 195 * pointer is not exposed to userspace. 196 */ 197 u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id) 198 { 199 u32 *k = fc->scramble_key; 200 u64 v = (unsigned long) id; 201 u32 v0 = v; 202 u32 v1 = v >> 32; 203 u32 sum = 0; 204 int i; 205 206 for (i = 0; i < 32; i++) { 207 v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]); 208 sum += 0x9E3779B9; 209 v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ (sum + k[sum>>11 & 3]); 210 } 211 212 return (u64) v0 + ((u64) v1 << 32); 213 } 214 215 /* 216 * Check if page is under writeback 217 * 218 * This is currently done by walking the list of writepage requests 219 * for the inode, which can be pretty inefficient. 220 */ 221 static bool fuse_page_is_writeback(struct inode *inode, pgoff_t index) 222 { 223 struct fuse_conn *fc = get_fuse_conn(inode); 224 struct fuse_inode *fi = get_fuse_inode(inode); 225 struct fuse_req *req; 226 bool found = false; 227 228 spin_lock(&fc->lock); 229 list_for_each_entry(req, &fi->writepages, writepages_entry) { 230 pgoff_t curr_index; 231 232 BUG_ON(req->inode != inode); 233 curr_index = req->misc.write.in.offset >> PAGE_CACHE_SHIFT; 234 if (curr_index == index) { 235 found = true; 236 break; 237 } 238 } 239 spin_unlock(&fc->lock); 240 241 return found; 242 } 243 244 /* 245 * Wait for page writeback to be completed. 246 * 247 * Since fuse doesn't rely on the VM writeback tracking, this has to 248 * use some other means. 249 */ 250 static int fuse_wait_on_page_writeback(struct inode *inode, pgoff_t index) 251 { 252 struct fuse_inode *fi = get_fuse_inode(inode); 253 254 wait_event(fi->page_waitq, !fuse_page_is_writeback(inode, index)); 255 return 0; 256 } 257 258 static int fuse_flush(struct file *file, fl_owner_t id) 259 { 260 struct inode *inode = file->f_path.dentry->d_inode; 261 struct fuse_conn *fc = get_fuse_conn(inode); 262 struct fuse_file *ff = file->private_data; 263 struct fuse_req *req; 264 struct fuse_flush_in inarg; 265 int err; 266 267 if (is_bad_inode(inode)) 268 return -EIO; 269 270 if (fc->no_flush) 271 return 0; 272 273 req = fuse_get_req_nofail(fc, file); 274 memset(&inarg, 0, sizeof(inarg)); 275 inarg.fh = ff->fh; 276 inarg.lock_owner = fuse_lock_owner_id(fc, id); 277 req->in.h.opcode = FUSE_FLUSH; 278 req->in.h.nodeid = get_node_id(inode); 279 req->in.numargs = 1; 280 req->in.args[0].size = sizeof(inarg); 281 req->in.args[0].value = &inarg; 282 req->force = 1; 283 request_send(fc, req); 284 err = req->out.h.error; 285 fuse_put_request(fc, req); 286 if (err == -ENOSYS) { 287 fc->no_flush = 1; 288 err = 0; 289 } 290 return err; 291 } 292 293 /* 294 * Wait for all pending writepages on the inode to finish. 295 * 296 * This is currently done by blocking further writes with FUSE_NOWRITE 297 * and waiting for all sent writes to complete. 298 * 299 * This must be called under i_mutex, otherwise the FUSE_NOWRITE usage 300 * could conflict with truncation. 301 */ 302 static void fuse_sync_writes(struct inode *inode) 303 { 304 fuse_set_nowrite(inode); 305 fuse_release_nowrite(inode); 306 } 307 308 int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, 309 int isdir) 310 { 311 struct inode *inode = de->d_inode; 312 struct fuse_conn *fc = get_fuse_conn(inode); 313 struct fuse_file *ff = file->private_data; 314 struct fuse_req *req; 315 struct fuse_fsync_in inarg; 316 int err; 317 318 if (is_bad_inode(inode)) 319 return -EIO; 320 321 if ((!isdir && fc->no_fsync) || (isdir && fc->no_fsyncdir)) 322 return 0; 323 324 /* 325 * Start writeback against all dirty pages of the inode, then 326 * wait for all outstanding writes, before sending the FSYNC 327 * request. 328 */ 329 err = write_inode_now(inode, 0); 330 if (err) 331 return err; 332 333 fuse_sync_writes(inode); 334 335 req = fuse_get_req(fc); 336 if (IS_ERR(req)) 337 return PTR_ERR(req); 338 339 memset(&inarg, 0, sizeof(inarg)); 340 inarg.fh = ff->fh; 341 inarg.fsync_flags = datasync ? 1 : 0; 342 req->in.h.opcode = isdir ? FUSE_FSYNCDIR : FUSE_FSYNC; 343 req->in.h.nodeid = get_node_id(inode); 344 req->in.numargs = 1; 345 req->in.args[0].size = sizeof(inarg); 346 req->in.args[0].value = &inarg; 347 request_send(fc, req); 348 err = req->out.h.error; 349 fuse_put_request(fc, req); 350 if (err == -ENOSYS) { 351 if (isdir) 352 fc->no_fsyncdir = 1; 353 else 354 fc->no_fsync = 1; 355 err = 0; 356 } 357 return err; 358 } 359 360 static int fuse_fsync(struct file *file, struct dentry *de, int datasync) 361 { 362 return fuse_fsync_common(file, de, datasync, 0); 363 } 364 365 void fuse_read_fill(struct fuse_req *req, struct file *file, 366 struct inode *inode, loff_t pos, size_t count, int opcode) 367 { 368 struct fuse_read_in *inarg = &req->misc.read.in; 369 struct fuse_file *ff = file->private_data; 370 371 inarg->fh = ff->fh; 372 inarg->offset = pos; 373 inarg->size = count; 374 inarg->flags = file->f_flags; 375 req->in.h.opcode = opcode; 376 req->in.h.nodeid = get_node_id(inode); 377 req->in.numargs = 1; 378 req->in.args[0].size = sizeof(struct fuse_read_in); 379 req->in.args[0].value = inarg; 380 req->out.argpages = 1; 381 req->out.argvar = 1; 382 req->out.numargs = 1; 383 req->out.args[0].size = count; 384 } 385 386 static size_t fuse_send_read(struct fuse_req *req, struct file *file, 387 struct inode *inode, loff_t pos, size_t count, 388 fl_owner_t owner) 389 { 390 struct fuse_conn *fc = get_fuse_conn(inode); 391 392 fuse_read_fill(req, file, inode, pos, count, FUSE_READ); 393 if (owner != NULL) { 394 struct fuse_read_in *inarg = &req->misc.read.in; 395 396 inarg->read_flags |= FUSE_READ_LOCKOWNER; 397 inarg->lock_owner = fuse_lock_owner_id(fc, owner); 398 } 399 request_send(fc, req); 400 return req->out.args[0].size; 401 } 402 403 static void fuse_read_update_size(struct inode *inode, loff_t size, 404 u64 attr_ver) 405 { 406 struct fuse_conn *fc = get_fuse_conn(inode); 407 struct fuse_inode *fi = get_fuse_inode(inode); 408 409 spin_lock(&fc->lock); 410 if (attr_ver == fi->attr_version && size < inode->i_size) { 411 fi->attr_version = ++fc->attr_version; 412 i_size_write(inode, size); 413 } 414 spin_unlock(&fc->lock); 415 } 416 417 static int fuse_readpage(struct file *file, struct page *page) 418 { 419 struct inode *inode = page->mapping->host; 420 struct fuse_conn *fc = get_fuse_conn(inode); 421 struct fuse_req *req; 422 size_t num_read; 423 loff_t pos = page_offset(page); 424 size_t count = PAGE_CACHE_SIZE; 425 u64 attr_ver; 426 int err; 427 428 err = -EIO; 429 if (is_bad_inode(inode)) 430 goto out; 431 432 /* 433 * Page writeback can extend beyond the liftime of the 434 * page-cache page, so make sure we read a properly synced 435 * page. 436 */ 437 fuse_wait_on_page_writeback(inode, page->index); 438 439 req = fuse_get_req(fc); 440 err = PTR_ERR(req); 441 if (IS_ERR(req)) 442 goto out; 443 444 attr_ver = fuse_get_attr_version(fc); 445 446 req->out.page_zeroing = 1; 447 req->num_pages = 1; 448 req->pages[0] = page; 449 num_read = fuse_send_read(req, file, inode, pos, count, NULL); 450 err = req->out.h.error; 451 fuse_put_request(fc, req); 452 453 if (!err) { 454 /* 455 * Short read means EOF. If file size is larger, truncate it 456 */ 457 if (num_read < count) 458 fuse_read_update_size(inode, pos + num_read, attr_ver); 459 460 SetPageUptodate(page); 461 } 462 463 fuse_invalidate_attr(inode); /* atime changed */ 464 out: 465 unlock_page(page); 466 return err; 467 } 468 469 static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req) 470 { 471 int i; 472 size_t count = req->misc.read.in.size; 473 size_t num_read = req->out.args[0].size; 474 struct inode *inode = req->pages[0]->mapping->host; 475 476 /* 477 * Short read means EOF. If file size is larger, truncate it 478 */ 479 if (!req->out.h.error && num_read < count) { 480 loff_t pos = page_offset(req->pages[0]) + num_read; 481 fuse_read_update_size(inode, pos, req->misc.read.attr_ver); 482 } 483 484 fuse_invalidate_attr(inode); /* atime changed */ 485 486 for (i = 0; i < req->num_pages; i++) { 487 struct page *page = req->pages[i]; 488 if (!req->out.h.error) 489 SetPageUptodate(page); 490 else 491 SetPageError(page); 492 unlock_page(page); 493 } 494 if (req->ff) 495 fuse_file_put(req->ff); 496 fuse_put_request(fc, req); 497 } 498 499 static void fuse_send_readpages(struct fuse_req *req, struct file *file, 500 struct inode *inode) 501 { 502 struct fuse_conn *fc = get_fuse_conn(inode); 503 loff_t pos = page_offset(req->pages[0]); 504 size_t count = req->num_pages << PAGE_CACHE_SHIFT; 505 req->out.page_zeroing = 1; 506 fuse_read_fill(req, file, inode, pos, count, FUSE_READ); 507 req->misc.read.attr_ver = fuse_get_attr_version(fc); 508 if (fc->async_read) { 509 struct fuse_file *ff = file->private_data; 510 req->ff = fuse_file_get(ff); 511 req->end = fuse_readpages_end; 512 request_send_background(fc, req); 513 } else { 514 request_send(fc, req); 515 fuse_readpages_end(fc, req); 516 } 517 } 518 519 struct fuse_fill_data { 520 struct fuse_req *req; 521 struct file *file; 522 struct inode *inode; 523 }; 524 525 static int fuse_readpages_fill(void *_data, struct page *page) 526 { 527 struct fuse_fill_data *data = _data; 528 struct fuse_req *req = data->req; 529 struct inode *inode = data->inode; 530 struct fuse_conn *fc = get_fuse_conn(inode); 531 532 fuse_wait_on_page_writeback(inode, page->index); 533 534 if (req->num_pages && 535 (req->num_pages == FUSE_MAX_PAGES_PER_REQ || 536 (req->num_pages + 1) * PAGE_CACHE_SIZE > fc->max_read || 537 req->pages[req->num_pages - 1]->index + 1 != page->index)) { 538 fuse_send_readpages(req, data->file, inode); 539 data->req = req = fuse_get_req(fc); 540 if (IS_ERR(req)) { 541 unlock_page(page); 542 return PTR_ERR(req); 543 } 544 } 545 req->pages[req->num_pages] = page; 546 req->num_pages ++; 547 return 0; 548 } 549 550 static int fuse_readpages(struct file *file, struct address_space *mapping, 551 struct list_head *pages, unsigned nr_pages) 552 { 553 struct inode *inode = mapping->host; 554 struct fuse_conn *fc = get_fuse_conn(inode); 555 struct fuse_fill_data data; 556 int err; 557 558 err = -EIO; 559 if (is_bad_inode(inode)) 560 goto out; 561 562 data.file = file; 563 data.inode = inode; 564 data.req = fuse_get_req(fc); 565 err = PTR_ERR(data.req); 566 if (IS_ERR(data.req)) 567 goto out; 568 569 err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data); 570 if (!err) { 571 if (data.req->num_pages) 572 fuse_send_readpages(data.req, file, inode); 573 else 574 fuse_put_request(fc, data.req); 575 } 576 out: 577 return err; 578 } 579 580 static ssize_t fuse_file_aio_read(struct kiocb *iocb, const struct iovec *iov, 581 unsigned long nr_segs, loff_t pos) 582 { 583 struct inode *inode = iocb->ki_filp->f_mapping->host; 584 585 if (pos + iov_length(iov, nr_segs) > i_size_read(inode)) { 586 int err; 587 /* 588 * If trying to read past EOF, make sure the i_size 589 * attribute is up-to-date. 590 */ 591 err = fuse_update_attributes(inode, NULL, iocb->ki_filp, NULL); 592 if (err) 593 return err; 594 } 595 596 return generic_file_aio_read(iocb, iov, nr_segs, pos); 597 } 598 599 static void fuse_write_fill(struct fuse_req *req, struct file *file, 600 struct fuse_file *ff, struct inode *inode, 601 loff_t pos, size_t count, int writepage) 602 { 603 struct fuse_conn *fc = get_fuse_conn(inode); 604 struct fuse_write_in *inarg = &req->misc.write.in; 605 struct fuse_write_out *outarg = &req->misc.write.out; 606 607 memset(inarg, 0, sizeof(struct fuse_write_in)); 608 inarg->fh = ff->fh; 609 inarg->offset = pos; 610 inarg->size = count; 611 inarg->write_flags = writepage ? FUSE_WRITE_CACHE : 0; 612 inarg->flags = file ? file->f_flags : 0; 613 req->in.h.opcode = FUSE_WRITE; 614 req->in.h.nodeid = get_node_id(inode); 615 req->in.argpages = 1; 616 req->in.numargs = 2; 617 if (fc->minor < 9) 618 req->in.args[0].size = FUSE_COMPAT_WRITE_IN_SIZE; 619 else 620 req->in.args[0].size = sizeof(struct fuse_write_in); 621 req->in.args[0].value = inarg; 622 req->in.args[1].size = count; 623 req->out.numargs = 1; 624 req->out.args[0].size = sizeof(struct fuse_write_out); 625 req->out.args[0].value = outarg; 626 } 627 628 static size_t fuse_send_write(struct fuse_req *req, struct file *file, 629 struct inode *inode, loff_t pos, size_t count, 630 fl_owner_t owner) 631 { 632 struct fuse_conn *fc = get_fuse_conn(inode); 633 fuse_write_fill(req, file, file->private_data, inode, pos, count, 0); 634 if (owner != NULL) { 635 struct fuse_write_in *inarg = &req->misc.write.in; 636 inarg->write_flags |= FUSE_WRITE_LOCKOWNER; 637 inarg->lock_owner = fuse_lock_owner_id(fc, owner); 638 } 639 request_send(fc, req); 640 return req->misc.write.out.size; 641 } 642 643 static int fuse_write_begin(struct file *file, struct address_space *mapping, 644 loff_t pos, unsigned len, unsigned flags, 645 struct page **pagep, void **fsdata) 646 { 647 pgoff_t index = pos >> PAGE_CACHE_SHIFT; 648 649 *pagep = __grab_cache_page(mapping, index); 650 if (!*pagep) 651 return -ENOMEM; 652 return 0; 653 } 654 655 static void fuse_write_update_size(struct inode *inode, loff_t pos) 656 { 657 struct fuse_conn *fc = get_fuse_conn(inode); 658 struct fuse_inode *fi = get_fuse_inode(inode); 659 660 spin_lock(&fc->lock); 661 fi->attr_version = ++fc->attr_version; 662 if (pos > inode->i_size) 663 i_size_write(inode, pos); 664 spin_unlock(&fc->lock); 665 } 666 667 static int fuse_buffered_write(struct file *file, struct inode *inode, 668 loff_t pos, unsigned count, struct page *page) 669 { 670 int err; 671 size_t nres; 672 struct fuse_conn *fc = get_fuse_conn(inode); 673 unsigned offset = pos & (PAGE_CACHE_SIZE - 1); 674 struct fuse_req *req; 675 676 if (is_bad_inode(inode)) 677 return -EIO; 678 679 /* 680 * Make sure writepages on the same page are not mixed up with 681 * plain writes. 682 */ 683 fuse_wait_on_page_writeback(inode, page->index); 684 685 req = fuse_get_req(fc); 686 if (IS_ERR(req)) 687 return PTR_ERR(req); 688 689 req->num_pages = 1; 690 req->pages[0] = page; 691 req->page_offset = offset; 692 nres = fuse_send_write(req, file, inode, pos, count, NULL); 693 err = req->out.h.error; 694 fuse_put_request(fc, req); 695 if (!err && !nres) 696 err = -EIO; 697 if (!err) { 698 pos += nres; 699 fuse_write_update_size(inode, pos); 700 if (count == PAGE_CACHE_SIZE) 701 SetPageUptodate(page); 702 } 703 fuse_invalidate_attr(inode); 704 return err ? err : nres; 705 } 706 707 static int fuse_write_end(struct file *file, struct address_space *mapping, 708 loff_t pos, unsigned len, unsigned copied, 709 struct page *page, void *fsdata) 710 { 711 struct inode *inode = mapping->host; 712 int res = 0; 713 714 if (copied) 715 res = fuse_buffered_write(file, inode, pos, copied, page); 716 717 unlock_page(page); 718 page_cache_release(page); 719 return res; 720 } 721 722 static size_t fuse_send_write_pages(struct fuse_req *req, struct file *file, 723 struct inode *inode, loff_t pos, 724 size_t count) 725 { 726 size_t res; 727 unsigned offset; 728 unsigned i; 729 730 for (i = 0; i < req->num_pages; i++) 731 fuse_wait_on_page_writeback(inode, req->pages[i]->index); 732 733 res = fuse_send_write(req, file, inode, pos, count, NULL); 734 735 offset = req->page_offset; 736 count = res; 737 for (i = 0; i < req->num_pages; i++) { 738 struct page *page = req->pages[i]; 739 740 if (!req->out.h.error && !offset && count >= PAGE_CACHE_SIZE) 741 SetPageUptodate(page); 742 743 if (count > PAGE_CACHE_SIZE - offset) 744 count -= PAGE_CACHE_SIZE - offset; 745 else 746 count = 0; 747 offset = 0; 748 749 unlock_page(page); 750 page_cache_release(page); 751 } 752 753 return res; 754 } 755 756 static ssize_t fuse_fill_write_pages(struct fuse_req *req, 757 struct address_space *mapping, 758 struct iov_iter *ii, loff_t pos) 759 { 760 struct fuse_conn *fc = get_fuse_conn(mapping->host); 761 unsigned offset = pos & (PAGE_CACHE_SIZE - 1); 762 size_t count = 0; 763 int err; 764 765 req->page_offset = offset; 766 767 do { 768 size_t tmp; 769 struct page *page; 770 pgoff_t index = pos >> PAGE_CACHE_SHIFT; 771 size_t bytes = min_t(size_t, PAGE_CACHE_SIZE - offset, 772 iov_iter_count(ii)); 773 774 bytes = min_t(size_t, bytes, fc->max_write - count); 775 776 again: 777 err = -EFAULT; 778 if (iov_iter_fault_in_readable(ii, bytes)) 779 break; 780 781 err = -ENOMEM; 782 page = __grab_cache_page(mapping, index); 783 if (!page) 784 break; 785 786 pagefault_disable(); 787 tmp = iov_iter_copy_from_user_atomic(page, ii, offset, bytes); 788 pagefault_enable(); 789 flush_dcache_page(page); 790 791 if (!tmp) { 792 unlock_page(page); 793 page_cache_release(page); 794 bytes = min(bytes, iov_iter_single_seg_count(ii)); 795 goto again; 796 } 797 798 err = 0; 799 req->pages[req->num_pages] = page; 800 req->num_pages++; 801 802 iov_iter_advance(ii, tmp); 803 count += tmp; 804 pos += tmp; 805 offset += tmp; 806 if (offset == PAGE_CACHE_SIZE) 807 offset = 0; 808 809 if (!fc->big_writes) 810 break; 811 } while (iov_iter_count(ii) && count < fc->max_write && 812 req->num_pages < FUSE_MAX_PAGES_PER_REQ && offset == 0); 813 814 return count > 0 ? count : err; 815 } 816 817 static ssize_t fuse_perform_write(struct file *file, 818 struct address_space *mapping, 819 struct iov_iter *ii, loff_t pos) 820 { 821 struct inode *inode = mapping->host; 822 struct fuse_conn *fc = get_fuse_conn(inode); 823 int err = 0; 824 ssize_t res = 0; 825 826 if (is_bad_inode(inode)) 827 return -EIO; 828 829 do { 830 struct fuse_req *req; 831 ssize_t count; 832 833 req = fuse_get_req(fc); 834 if (IS_ERR(req)) { 835 err = PTR_ERR(req); 836 break; 837 } 838 839 count = fuse_fill_write_pages(req, mapping, ii, pos); 840 if (count <= 0) { 841 err = count; 842 } else { 843 size_t num_written; 844 845 num_written = fuse_send_write_pages(req, file, inode, 846 pos, count); 847 err = req->out.h.error; 848 if (!err) { 849 res += num_written; 850 pos += num_written; 851 852 /* break out of the loop on short write */ 853 if (num_written != count) 854 err = -EIO; 855 } 856 } 857 fuse_put_request(fc, req); 858 } while (!err && iov_iter_count(ii)); 859 860 if (res > 0) 861 fuse_write_update_size(inode, pos); 862 863 fuse_invalidate_attr(inode); 864 865 return res > 0 ? res : err; 866 } 867 868 static ssize_t fuse_file_aio_write(struct kiocb *iocb, const struct iovec *iov, 869 unsigned long nr_segs, loff_t pos) 870 { 871 struct file *file = iocb->ki_filp; 872 struct address_space *mapping = file->f_mapping; 873 size_t count = 0; 874 ssize_t written = 0; 875 struct inode *inode = mapping->host; 876 ssize_t err; 877 struct iov_iter i; 878 879 WARN_ON(iocb->ki_pos != pos); 880 881 err = generic_segment_checks(iov, &nr_segs, &count, VERIFY_READ); 882 if (err) 883 return err; 884 885 mutex_lock(&inode->i_mutex); 886 vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); 887 888 /* We can write back this queue in page reclaim */ 889 current->backing_dev_info = mapping->backing_dev_info; 890 891 err = generic_write_checks(file, &pos, &count, S_ISBLK(inode->i_mode)); 892 if (err) 893 goto out; 894 895 if (count == 0) 896 goto out; 897 898 err = file_remove_suid(file); 899 if (err) 900 goto out; 901 902 file_update_time(file); 903 904 iov_iter_init(&i, iov, nr_segs, count, 0); 905 written = fuse_perform_write(file, mapping, &i, pos); 906 if (written >= 0) 907 iocb->ki_pos = pos + written; 908 909 out: 910 current->backing_dev_info = NULL; 911 mutex_unlock(&inode->i_mutex); 912 913 return written ? written : err; 914 } 915 916 static void fuse_release_user_pages(struct fuse_req *req, int write) 917 { 918 unsigned i; 919 920 for (i = 0; i < req->num_pages; i++) { 921 struct page *page = req->pages[i]; 922 if (write) 923 set_page_dirty_lock(page); 924 put_page(page); 925 } 926 } 927 928 static int fuse_get_user_pages(struct fuse_req *req, const char __user *buf, 929 unsigned nbytes, int write) 930 { 931 unsigned long user_addr = (unsigned long) buf; 932 unsigned offset = user_addr & ~PAGE_MASK; 933 int npages; 934 935 /* This doesn't work with nfsd */ 936 if (!current->mm) 937 return -EPERM; 938 939 nbytes = min(nbytes, (unsigned) FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT); 940 npages = (nbytes + offset + PAGE_SIZE - 1) >> PAGE_SHIFT; 941 npages = clamp(npages, 1, FUSE_MAX_PAGES_PER_REQ); 942 down_read(¤t->mm->mmap_sem); 943 npages = get_user_pages(current, current->mm, user_addr, npages, write, 944 0, req->pages, NULL); 945 up_read(¤t->mm->mmap_sem); 946 if (npages < 0) 947 return npages; 948 949 req->num_pages = npages; 950 req->page_offset = offset; 951 return 0; 952 } 953 954 static ssize_t fuse_direct_io(struct file *file, const char __user *buf, 955 size_t count, loff_t *ppos, int write) 956 { 957 struct inode *inode = file->f_path.dentry->d_inode; 958 struct fuse_conn *fc = get_fuse_conn(inode); 959 size_t nmax = write ? fc->max_write : fc->max_read; 960 loff_t pos = *ppos; 961 ssize_t res = 0; 962 struct fuse_req *req; 963 964 if (is_bad_inode(inode)) 965 return -EIO; 966 967 req = fuse_get_req(fc); 968 if (IS_ERR(req)) 969 return PTR_ERR(req); 970 971 while (count) { 972 size_t nres; 973 size_t nbytes_limit = min(count, nmax); 974 size_t nbytes; 975 int err = fuse_get_user_pages(req, buf, nbytes_limit, !write); 976 if (err) { 977 res = err; 978 break; 979 } 980 nbytes = (req->num_pages << PAGE_SHIFT) - req->page_offset; 981 nbytes = min(nbytes_limit, nbytes); 982 if (write) 983 nres = fuse_send_write(req, file, inode, pos, nbytes, 984 current->files); 985 else 986 nres = fuse_send_read(req, file, inode, pos, nbytes, 987 current->files); 988 fuse_release_user_pages(req, !write); 989 if (req->out.h.error) { 990 if (!res) 991 res = req->out.h.error; 992 break; 993 } else if (nres > nbytes) { 994 res = -EIO; 995 break; 996 } 997 count -= nres; 998 res += nres; 999 pos += nres; 1000 buf += nres; 1001 if (nres != nbytes) 1002 break; 1003 if (count) { 1004 fuse_put_request(fc, req); 1005 req = fuse_get_req(fc); 1006 if (IS_ERR(req)) 1007 break; 1008 } 1009 } 1010 fuse_put_request(fc, req); 1011 if (res > 0) { 1012 if (write) 1013 fuse_write_update_size(inode, pos); 1014 *ppos = pos; 1015 } 1016 fuse_invalidate_attr(inode); 1017 1018 return res; 1019 } 1020 1021 static ssize_t fuse_direct_read(struct file *file, char __user *buf, 1022 size_t count, loff_t *ppos) 1023 { 1024 return fuse_direct_io(file, buf, count, ppos, 0); 1025 } 1026 1027 static ssize_t fuse_direct_write(struct file *file, const char __user *buf, 1028 size_t count, loff_t *ppos) 1029 { 1030 struct inode *inode = file->f_path.dentry->d_inode; 1031 ssize_t res; 1032 /* Don't allow parallel writes to the same file */ 1033 mutex_lock(&inode->i_mutex); 1034 res = generic_write_checks(file, ppos, &count, 0); 1035 if (!res) 1036 res = fuse_direct_io(file, buf, count, ppos, 1); 1037 mutex_unlock(&inode->i_mutex); 1038 return res; 1039 } 1040 1041 static void fuse_writepage_free(struct fuse_conn *fc, struct fuse_req *req) 1042 { 1043 __free_page(req->pages[0]); 1044 fuse_file_put(req->ff); 1045 fuse_put_request(fc, req); 1046 } 1047 1048 static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) 1049 { 1050 struct inode *inode = req->inode; 1051 struct fuse_inode *fi = get_fuse_inode(inode); 1052 struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info; 1053 1054 list_del(&req->writepages_entry); 1055 dec_bdi_stat(bdi, BDI_WRITEBACK); 1056 dec_zone_page_state(req->pages[0], NR_WRITEBACK_TEMP); 1057 bdi_writeout_inc(bdi); 1058 wake_up(&fi->page_waitq); 1059 } 1060 1061 /* Called under fc->lock, may release and reacquire it */ 1062 static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req) 1063 { 1064 struct fuse_inode *fi = get_fuse_inode(req->inode); 1065 loff_t size = i_size_read(req->inode); 1066 struct fuse_write_in *inarg = &req->misc.write.in; 1067 1068 if (!fc->connected) 1069 goto out_free; 1070 1071 if (inarg->offset + PAGE_CACHE_SIZE <= size) { 1072 inarg->size = PAGE_CACHE_SIZE; 1073 } else if (inarg->offset < size) { 1074 inarg->size = size & (PAGE_CACHE_SIZE - 1); 1075 } else { 1076 /* Got truncated off completely */ 1077 goto out_free; 1078 } 1079 1080 req->in.args[1].size = inarg->size; 1081 fi->writectr++; 1082 request_send_background_locked(fc, req); 1083 return; 1084 1085 out_free: 1086 fuse_writepage_finish(fc, req); 1087 spin_unlock(&fc->lock); 1088 fuse_writepage_free(fc, req); 1089 spin_lock(&fc->lock); 1090 } 1091 1092 /* 1093 * If fi->writectr is positive (no truncate or fsync going on) send 1094 * all queued writepage requests. 1095 * 1096 * Called with fc->lock 1097 */ 1098 void fuse_flush_writepages(struct inode *inode) 1099 { 1100 struct fuse_conn *fc = get_fuse_conn(inode); 1101 struct fuse_inode *fi = get_fuse_inode(inode); 1102 struct fuse_req *req; 1103 1104 while (fi->writectr >= 0 && !list_empty(&fi->queued_writes)) { 1105 req = list_entry(fi->queued_writes.next, struct fuse_req, list); 1106 list_del_init(&req->list); 1107 fuse_send_writepage(fc, req); 1108 } 1109 } 1110 1111 static void fuse_writepage_end(struct fuse_conn *fc, struct fuse_req *req) 1112 { 1113 struct inode *inode = req->inode; 1114 struct fuse_inode *fi = get_fuse_inode(inode); 1115 1116 mapping_set_error(inode->i_mapping, req->out.h.error); 1117 spin_lock(&fc->lock); 1118 fi->writectr--; 1119 fuse_writepage_finish(fc, req); 1120 spin_unlock(&fc->lock); 1121 fuse_writepage_free(fc, req); 1122 } 1123 1124 static int fuse_writepage_locked(struct page *page) 1125 { 1126 struct address_space *mapping = page->mapping; 1127 struct inode *inode = mapping->host; 1128 struct fuse_conn *fc = get_fuse_conn(inode); 1129 struct fuse_inode *fi = get_fuse_inode(inode); 1130 struct fuse_req *req; 1131 struct fuse_file *ff; 1132 struct page *tmp_page; 1133 1134 set_page_writeback(page); 1135 1136 req = fuse_request_alloc_nofs(); 1137 if (!req) 1138 goto err; 1139 1140 tmp_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM); 1141 if (!tmp_page) 1142 goto err_free; 1143 1144 spin_lock(&fc->lock); 1145 BUG_ON(list_empty(&fi->write_files)); 1146 ff = list_entry(fi->write_files.next, struct fuse_file, write_entry); 1147 req->ff = fuse_file_get(ff); 1148 spin_unlock(&fc->lock); 1149 1150 fuse_write_fill(req, NULL, ff, inode, page_offset(page), 0, 1); 1151 1152 copy_highpage(tmp_page, page); 1153 req->num_pages = 1; 1154 req->pages[0] = tmp_page; 1155 req->page_offset = 0; 1156 req->end = fuse_writepage_end; 1157 req->inode = inode; 1158 1159 inc_bdi_stat(mapping->backing_dev_info, BDI_WRITEBACK); 1160 inc_zone_page_state(tmp_page, NR_WRITEBACK_TEMP); 1161 end_page_writeback(page); 1162 1163 spin_lock(&fc->lock); 1164 list_add(&req->writepages_entry, &fi->writepages); 1165 list_add_tail(&req->list, &fi->queued_writes); 1166 fuse_flush_writepages(inode); 1167 spin_unlock(&fc->lock); 1168 1169 return 0; 1170 1171 err_free: 1172 fuse_request_free(req); 1173 err: 1174 end_page_writeback(page); 1175 return -ENOMEM; 1176 } 1177 1178 static int fuse_writepage(struct page *page, struct writeback_control *wbc) 1179 { 1180 int err; 1181 1182 err = fuse_writepage_locked(page); 1183 unlock_page(page); 1184 1185 return err; 1186 } 1187 1188 static int fuse_launder_page(struct page *page) 1189 { 1190 int err = 0; 1191 if (clear_page_dirty_for_io(page)) { 1192 struct inode *inode = page->mapping->host; 1193 err = fuse_writepage_locked(page); 1194 if (!err) 1195 fuse_wait_on_page_writeback(inode, page->index); 1196 } 1197 return err; 1198 } 1199 1200 /* 1201 * Write back dirty pages now, because there may not be any suitable 1202 * open files later 1203 */ 1204 static void fuse_vma_close(struct vm_area_struct *vma) 1205 { 1206 filemap_write_and_wait(vma->vm_file->f_mapping); 1207 } 1208 1209 /* 1210 * Wait for writeback against this page to complete before allowing it 1211 * to be marked dirty again, and hence written back again, possibly 1212 * before the previous writepage completed. 1213 * 1214 * Block here, instead of in ->writepage(), so that the userspace fs 1215 * can only block processes actually operating on the filesystem. 1216 * 1217 * Otherwise unprivileged userspace fs would be able to block 1218 * unrelated: 1219 * 1220 * - page migration 1221 * - sync(2) 1222 * - try_to_free_pages() with order > PAGE_ALLOC_COSTLY_ORDER 1223 */ 1224 static int fuse_page_mkwrite(struct vm_area_struct *vma, struct page *page) 1225 { 1226 /* 1227 * Don't use page->mapping as it may become NULL from a 1228 * concurrent truncate. 1229 */ 1230 struct inode *inode = vma->vm_file->f_mapping->host; 1231 1232 fuse_wait_on_page_writeback(inode, page->index); 1233 return 0; 1234 } 1235 1236 static struct vm_operations_struct fuse_file_vm_ops = { 1237 .close = fuse_vma_close, 1238 .fault = filemap_fault, 1239 .page_mkwrite = fuse_page_mkwrite, 1240 }; 1241 1242 static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma) 1243 { 1244 if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE)) { 1245 struct inode *inode = file->f_dentry->d_inode; 1246 struct fuse_conn *fc = get_fuse_conn(inode); 1247 struct fuse_inode *fi = get_fuse_inode(inode); 1248 struct fuse_file *ff = file->private_data; 1249 /* 1250 * file may be written through mmap, so chain it onto the 1251 * inodes's write_file list 1252 */ 1253 spin_lock(&fc->lock); 1254 if (list_empty(&ff->write_entry)) 1255 list_add(&ff->write_entry, &fi->write_files); 1256 spin_unlock(&fc->lock); 1257 } 1258 file_accessed(file); 1259 vma->vm_ops = &fuse_file_vm_ops; 1260 return 0; 1261 } 1262 1263 static int convert_fuse_file_lock(const struct fuse_file_lock *ffl, 1264 struct file_lock *fl) 1265 { 1266 switch (ffl->type) { 1267 case F_UNLCK: 1268 break; 1269 1270 case F_RDLCK: 1271 case F_WRLCK: 1272 if (ffl->start > OFFSET_MAX || ffl->end > OFFSET_MAX || 1273 ffl->end < ffl->start) 1274 return -EIO; 1275 1276 fl->fl_start = ffl->start; 1277 fl->fl_end = ffl->end; 1278 fl->fl_pid = ffl->pid; 1279 break; 1280 1281 default: 1282 return -EIO; 1283 } 1284 fl->fl_type = ffl->type; 1285 return 0; 1286 } 1287 1288 static void fuse_lk_fill(struct fuse_req *req, struct file *file, 1289 const struct file_lock *fl, int opcode, pid_t pid, 1290 int flock) 1291 { 1292 struct inode *inode = file->f_path.dentry->d_inode; 1293 struct fuse_conn *fc = get_fuse_conn(inode); 1294 struct fuse_file *ff = file->private_data; 1295 struct fuse_lk_in *arg = &req->misc.lk_in; 1296 1297 arg->fh = ff->fh; 1298 arg->owner = fuse_lock_owner_id(fc, fl->fl_owner); 1299 arg->lk.start = fl->fl_start; 1300 arg->lk.end = fl->fl_end; 1301 arg->lk.type = fl->fl_type; 1302 arg->lk.pid = pid; 1303 if (flock) 1304 arg->lk_flags |= FUSE_LK_FLOCK; 1305 req->in.h.opcode = opcode; 1306 req->in.h.nodeid = get_node_id(inode); 1307 req->in.numargs = 1; 1308 req->in.args[0].size = sizeof(*arg); 1309 req->in.args[0].value = arg; 1310 } 1311 1312 static int fuse_getlk(struct file *file, struct file_lock *fl) 1313 { 1314 struct inode *inode = file->f_path.dentry->d_inode; 1315 struct fuse_conn *fc = get_fuse_conn(inode); 1316 struct fuse_req *req; 1317 struct fuse_lk_out outarg; 1318 int err; 1319 1320 req = fuse_get_req(fc); 1321 if (IS_ERR(req)) 1322 return PTR_ERR(req); 1323 1324 fuse_lk_fill(req, file, fl, FUSE_GETLK, 0, 0); 1325 req->out.numargs = 1; 1326 req->out.args[0].size = sizeof(outarg); 1327 req->out.args[0].value = &outarg; 1328 request_send(fc, req); 1329 err = req->out.h.error; 1330 fuse_put_request(fc, req); 1331 if (!err) 1332 err = convert_fuse_file_lock(&outarg.lk, fl); 1333 1334 return err; 1335 } 1336 1337 static int fuse_setlk(struct file *file, struct file_lock *fl, int flock) 1338 { 1339 struct inode *inode = file->f_path.dentry->d_inode; 1340 struct fuse_conn *fc = get_fuse_conn(inode); 1341 struct fuse_req *req; 1342 int opcode = (fl->fl_flags & FL_SLEEP) ? FUSE_SETLKW : FUSE_SETLK; 1343 pid_t pid = fl->fl_type != F_UNLCK ? current->tgid : 0; 1344 int err; 1345 1346 if (fl->fl_lmops && fl->fl_lmops->fl_grant) { 1347 /* NLM needs asynchronous locks, which we don't support yet */ 1348 return -ENOLCK; 1349 } 1350 1351 /* Unlock on close is handled by the flush method */ 1352 if (fl->fl_flags & FL_CLOSE) 1353 return 0; 1354 1355 req = fuse_get_req(fc); 1356 if (IS_ERR(req)) 1357 return PTR_ERR(req); 1358 1359 fuse_lk_fill(req, file, fl, opcode, pid, flock); 1360 request_send(fc, req); 1361 err = req->out.h.error; 1362 /* locking is restartable */ 1363 if (err == -EINTR) 1364 err = -ERESTARTSYS; 1365 fuse_put_request(fc, req); 1366 return err; 1367 } 1368 1369 static int fuse_file_lock(struct file *file, int cmd, struct file_lock *fl) 1370 { 1371 struct inode *inode = file->f_path.dentry->d_inode; 1372 struct fuse_conn *fc = get_fuse_conn(inode); 1373 int err; 1374 1375 if (cmd == F_CANCELLK) { 1376 err = 0; 1377 } else if (cmd == F_GETLK) { 1378 if (fc->no_lock) { 1379 posix_test_lock(file, fl); 1380 err = 0; 1381 } else 1382 err = fuse_getlk(file, fl); 1383 } else { 1384 if (fc->no_lock) 1385 err = posix_lock_file(file, fl, NULL); 1386 else 1387 err = fuse_setlk(file, fl, 0); 1388 } 1389 return err; 1390 } 1391 1392 static int fuse_file_flock(struct file *file, int cmd, struct file_lock *fl) 1393 { 1394 struct inode *inode = file->f_path.dentry->d_inode; 1395 struct fuse_conn *fc = get_fuse_conn(inode); 1396 int err; 1397 1398 if (fc->no_lock) { 1399 err = flock_lock_file_wait(file, fl); 1400 } else { 1401 /* emulate flock with POSIX locks */ 1402 fl->fl_owner = (fl_owner_t) file; 1403 err = fuse_setlk(file, fl, 1); 1404 } 1405 1406 return err; 1407 } 1408 1409 static sector_t fuse_bmap(struct address_space *mapping, sector_t block) 1410 { 1411 struct inode *inode = mapping->host; 1412 struct fuse_conn *fc = get_fuse_conn(inode); 1413 struct fuse_req *req; 1414 struct fuse_bmap_in inarg; 1415 struct fuse_bmap_out outarg; 1416 int err; 1417 1418 if (!inode->i_sb->s_bdev || fc->no_bmap) 1419 return 0; 1420 1421 req = fuse_get_req(fc); 1422 if (IS_ERR(req)) 1423 return 0; 1424 1425 memset(&inarg, 0, sizeof(inarg)); 1426 inarg.block = block; 1427 inarg.blocksize = inode->i_sb->s_blocksize; 1428 req->in.h.opcode = FUSE_BMAP; 1429 req->in.h.nodeid = get_node_id(inode); 1430 req->in.numargs = 1; 1431 req->in.args[0].size = sizeof(inarg); 1432 req->in.args[0].value = &inarg; 1433 req->out.numargs = 1; 1434 req->out.args[0].size = sizeof(outarg); 1435 req->out.args[0].value = &outarg; 1436 request_send(fc, req); 1437 err = req->out.h.error; 1438 fuse_put_request(fc, req); 1439 if (err == -ENOSYS) 1440 fc->no_bmap = 1; 1441 1442 return err ? 0 : outarg.block; 1443 } 1444 1445 static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin) 1446 { 1447 loff_t retval; 1448 struct inode *inode = file->f_path.dentry->d_inode; 1449 1450 mutex_lock(&inode->i_mutex); 1451 switch (origin) { 1452 case SEEK_END: 1453 retval = fuse_update_attributes(inode, NULL, file, NULL); 1454 if (retval) 1455 return retval; 1456 offset += i_size_read(inode); 1457 break; 1458 case SEEK_CUR: 1459 offset += file->f_pos; 1460 } 1461 retval = -EINVAL; 1462 if (offset >= 0 && offset <= inode->i_sb->s_maxbytes) { 1463 if (offset != file->f_pos) { 1464 file->f_pos = offset; 1465 file->f_version = 0; 1466 } 1467 retval = offset; 1468 } 1469 mutex_unlock(&inode->i_mutex); 1470 return retval; 1471 } 1472 1473 static const struct file_operations fuse_file_operations = { 1474 .llseek = fuse_file_llseek, 1475 .read = do_sync_read, 1476 .aio_read = fuse_file_aio_read, 1477 .write = do_sync_write, 1478 .aio_write = fuse_file_aio_write, 1479 .mmap = fuse_file_mmap, 1480 .open = fuse_open, 1481 .flush = fuse_flush, 1482 .release = fuse_release, 1483 .fsync = fuse_fsync, 1484 .lock = fuse_file_lock, 1485 .flock = fuse_file_flock, 1486 .splice_read = generic_file_splice_read, 1487 }; 1488 1489 static const struct file_operations fuse_direct_io_file_operations = { 1490 .llseek = fuse_file_llseek, 1491 .read = fuse_direct_read, 1492 .write = fuse_direct_write, 1493 .open = fuse_open, 1494 .flush = fuse_flush, 1495 .release = fuse_release, 1496 .fsync = fuse_fsync, 1497 .lock = fuse_file_lock, 1498 .flock = fuse_file_flock, 1499 /* no mmap and splice_read */ 1500 }; 1501 1502 static const struct address_space_operations fuse_file_aops = { 1503 .readpage = fuse_readpage, 1504 .writepage = fuse_writepage, 1505 .launder_page = fuse_launder_page, 1506 .write_begin = fuse_write_begin, 1507 .write_end = fuse_write_end, 1508 .readpages = fuse_readpages, 1509 .set_page_dirty = __set_page_dirty_nobuffers, 1510 .bmap = fuse_bmap, 1511 }; 1512 1513 void fuse_init_file_inode(struct inode *inode) 1514 { 1515 inode->i_fop = &fuse_file_operations; 1516 inode->i_data.a_ops = &fuse_file_aops; 1517 } 1518