1 /* AFS filesystem file handling 2 * 3 * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 9 * 2 of the License, or (at your option) any later version. 10 */ 11 12 #include <linux/kernel.h> 13 #include <linux/module.h> 14 #include <linux/init.h> 15 #include <linux/fs.h> 16 #include <linux/pagemap.h> 17 #include <linux/writeback.h> 18 #include <linux/gfp.h> 19 #include <linux/task_io_accounting_ops.h> 20 #include <linux/mm.h> 21 #include "internal.h" 22 23 static int afs_file_mmap(struct file *file, struct vm_area_struct *vma); 24 static int afs_readpage(struct file *file, struct page *page); 25 static void afs_invalidatepage(struct page *page, unsigned int offset, 26 unsigned int length); 27 static int afs_releasepage(struct page *page, gfp_t gfp_flags); 28 29 static int afs_readpages(struct file *filp, struct address_space *mapping, 30 struct list_head *pages, unsigned nr_pages); 31 32 const struct file_operations afs_file_operations = { 33 .open = afs_open, 34 .release = afs_release, 35 .llseek = generic_file_llseek, 36 .read_iter = generic_file_read_iter, 37 .write_iter = afs_file_write, 38 .mmap = afs_file_mmap, 39 .splice_read = generic_file_splice_read, 40 .fsync = afs_fsync, 41 .lock = afs_lock, 42 .flock = afs_flock, 43 }; 44 45 const struct inode_operations afs_file_inode_operations = { 46 .getattr = afs_getattr, 47 .setattr = afs_setattr, 48 .permission = afs_permission, 49 .listxattr = afs_listxattr, 50 }; 51 52 const struct address_space_operations afs_fs_aops = { 53 .readpage = afs_readpage, 54 .readpages = afs_readpages, 55 .set_page_dirty = afs_set_page_dirty, 56 .launder_page = afs_launder_page, 57 .releasepage = afs_releasepage, 58 .invalidatepage = afs_invalidatepage, 59 .write_begin = afs_write_begin, 60 .write_end = afs_write_end, 61 .writepage = afs_writepage, 62 .writepages = afs_writepages, 63 }; 64 65 static const struct vm_operations_struct afs_vm_ops = { 66 .fault = filemap_fault, 67 .map_pages = filemap_map_pages, 68 .page_mkwrite = afs_page_mkwrite, 69 }; 70 71 /* 72 * Discard a pin on a writeback key. 73 */ 74 void afs_put_wb_key(struct afs_wb_key *wbk) 75 { 76 if (refcount_dec_and_test(&wbk->usage)) { 77 key_put(wbk->key); 78 kfree(wbk); 79 } 80 } 81 82 /* 83 * Cache key for writeback. 84 */ 85 int afs_cache_wb_key(struct afs_vnode *vnode, struct afs_file *af) 86 { 87 struct afs_wb_key *wbk, *p; 88 89 wbk = kzalloc(sizeof(struct afs_wb_key), GFP_KERNEL); 90 if (!wbk) 91 return -ENOMEM; 92 refcount_set(&wbk->usage, 2); 93 wbk->key = af->key; 94 95 spin_lock(&vnode->wb_lock); 96 list_for_each_entry(p, &vnode->wb_keys, vnode_link) { 97 if (p->key == wbk->key) 98 goto found; 99 } 100 101 key_get(wbk->key); 102 list_add_tail(&wbk->vnode_link, &vnode->wb_keys); 103 spin_unlock(&vnode->wb_lock); 104 af->wb = wbk; 105 return 0; 106 107 found: 108 refcount_inc(&p->usage); 109 spin_unlock(&vnode->wb_lock); 110 af->wb = p; 111 kfree(wbk); 112 return 0; 113 } 114 115 /* 116 * open an AFS file or directory and attach a key to it 117 */ 118 int afs_open(struct inode *inode, struct file *file) 119 { 120 struct afs_vnode *vnode = AFS_FS_I(inode); 121 struct afs_file *af; 122 struct key *key; 123 int ret; 124 125 _enter("{%llx:%llu},", vnode->fid.vid, vnode->fid.vnode); 126 127 key = afs_request_key(vnode->volume->cell); 128 if (IS_ERR(key)) { 129 ret = PTR_ERR(key); 130 goto error; 131 } 132 133 af = kzalloc(sizeof(*af), GFP_KERNEL); 134 if (!af) { 135 ret = -ENOMEM; 136 goto error_key; 137 } 138 af->key = key; 139 140 ret = afs_validate(vnode, key); 141 if (ret < 0) 142 goto error_af; 143 144 if (file->f_mode & FMODE_WRITE) { 145 ret = afs_cache_wb_key(vnode, af); 146 if (ret < 0) 147 goto error_af; 148 } 149 150 if (file->f_flags & O_TRUNC) 151 set_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags); 152 153 file->private_data = af; 154 _leave(" = 0"); 155 return 0; 156 157 error_af: 158 kfree(af); 159 error_key: 160 key_put(key); 161 error: 162 _leave(" = %d", ret); 163 return ret; 164 } 165 166 /* 167 * release an AFS file or directory and discard its key 168 */ 169 int afs_release(struct inode *inode, struct file *file) 170 { 171 struct afs_vnode *vnode = AFS_FS_I(inode); 172 struct afs_file *af = file->private_data; 173 174 _enter("{%llx:%llu},", vnode->fid.vid, vnode->fid.vnode); 175 176 if ((file->f_mode & FMODE_WRITE)) 177 return vfs_fsync(file, 0); 178 179 file->private_data = NULL; 180 if (af->wb) 181 afs_put_wb_key(af->wb); 182 key_put(af->key); 183 kfree(af); 184 afs_prune_wb_keys(vnode); 185 _leave(" = 0"); 186 return 0; 187 } 188 189 /* 190 * Dispose of a ref to a read record. 191 */ 192 void afs_put_read(struct afs_read *req) 193 { 194 int i; 195 196 if (refcount_dec_and_test(&req->usage)) { 197 for (i = 0; i < req->nr_pages; i++) 198 if (req->pages[i]) 199 put_page(req->pages[i]); 200 if (req->pages != req->array) 201 kfree(req->pages); 202 kfree(req); 203 } 204 } 205 206 #ifdef CONFIG_AFS_FSCACHE 207 /* 208 * deal with notification that a page was read from the cache 209 */ 210 static void afs_file_readpage_read_complete(struct page *page, 211 void *data, 212 int error) 213 { 214 _enter("%p,%p,%d", page, data, error); 215 216 /* if the read completes with an error, we just unlock the page and let 217 * the VM reissue the readpage */ 218 if (!error) 219 SetPageUptodate(page); 220 unlock_page(page); 221 } 222 #endif 223 224 /* 225 * Fetch file data from the volume. 226 */ 227 int afs_fetch_data(struct afs_vnode *vnode, struct key *key, struct afs_read *desc) 228 { 229 struct afs_fs_cursor fc; 230 int ret; 231 232 _enter("%s{%llx:%llu.%u},%x,,,", 233 vnode->volume->name, 234 vnode->fid.vid, 235 vnode->fid.vnode, 236 vnode->fid.unique, 237 key_serial(key)); 238 239 ret = -ERESTARTSYS; 240 if (afs_begin_vnode_operation(&fc, vnode, key)) { 241 while (afs_select_fileserver(&fc)) { 242 fc.cb_break = afs_calc_vnode_cb_break(vnode); 243 afs_fs_fetch_data(&fc, desc); 244 } 245 246 afs_check_for_remote_deletion(&fc, fc.vnode); 247 afs_vnode_commit_status(&fc, vnode, fc.cb_break); 248 ret = afs_end_vnode_operation(&fc); 249 } 250 251 if (ret == 0) { 252 afs_stat_v(vnode, n_fetches); 253 atomic_long_add(desc->actual_len, 254 &afs_v2net(vnode)->n_fetch_bytes); 255 } 256 257 _leave(" = %d", ret); 258 return ret; 259 } 260 261 /* 262 * read page from file, directory or symlink, given a key to use 263 */ 264 int afs_page_filler(void *data, struct page *page) 265 { 266 struct inode *inode = page->mapping->host; 267 struct afs_vnode *vnode = AFS_FS_I(inode); 268 struct afs_read *req; 269 struct key *key = data; 270 int ret; 271 272 _enter("{%x},{%lu},{%lu}", key_serial(key), inode->i_ino, page->index); 273 274 BUG_ON(!PageLocked(page)); 275 276 ret = -ESTALE; 277 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) 278 goto error; 279 280 /* is it cached? */ 281 #ifdef CONFIG_AFS_FSCACHE 282 ret = fscache_read_or_alloc_page(vnode->cache, 283 page, 284 afs_file_readpage_read_complete, 285 NULL, 286 GFP_KERNEL); 287 #else 288 ret = -ENOBUFS; 289 #endif 290 switch (ret) { 291 /* read BIO submitted (page in cache) */ 292 case 0: 293 break; 294 295 /* page not yet cached */ 296 case -ENODATA: 297 _debug("cache said ENODATA"); 298 goto go_on; 299 300 /* page will not be cached */ 301 case -ENOBUFS: 302 _debug("cache said ENOBUFS"); 303 304 /* fall through */ 305 default: 306 go_on: 307 req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *), 308 GFP_KERNEL); 309 if (!req) 310 goto enomem; 311 312 /* We request a full page. If the page is a partial one at the 313 * end of the file, the server will return a short read and the 314 * unmarshalling code will clear the unfilled space. 315 */ 316 refcount_set(&req->usage, 1); 317 req->pos = (loff_t)page->index << PAGE_SHIFT; 318 req->len = PAGE_SIZE; 319 req->nr_pages = 1; 320 req->pages = req->array; 321 req->pages[0] = page; 322 get_page(page); 323 324 /* read the contents of the file from the server into the 325 * page */ 326 ret = afs_fetch_data(vnode, key, req); 327 afs_put_read(req); 328 329 if (ret < 0) { 330 if (ret == -ENOENT) { 331 _debug("got NOENT from server" 332 " - marking file deleted and stale"); 333 set_bit(AFS_VNODE_DELETED, &vnode->flags); 334 ret = -ESTALE; 335 } 336 337 #ifdef CONFIG_AFS_FSCACHE 338 fscache_uncache_page(vnode->cache, page); 339 #endif 340 BUG_ON(PageFsCache(page)); 341 342 if (ret == -EINTR || 343 ret == -ENOMEM || 344 ret == -ERESTARTSYS || 345 ret == -EAGAIN) 346 goto error; 347 goto io_error; 348 } 349 350 SetPageUptodate(page); 351 352 /* send the page to the cache */ 353 #ifdef CONFIG_AFS_FSCACHE 354 if (PageFsCache(page) && 355 fscache_write_page(vnode->cache, page, vnode->status.size, 356 GFP_KERNEL) != 0) { 357 fscache_uncache_page(vnode->cache, page); 358 BUG_ON(PageFsCache(page)); 359 } 360 #endif 361 unlock_page(page); 362 } 363 364 _leave(" = 0"); 365 return 0; 366 367 io_error: 368 SetPageError(page); 369 goto error; 370 enomem: 371 ret = -ENOMEM; 372 error: 373 unlock_page(page); 374 _leave(" = %d", ret); 375 return ret; 376 } 377 378 /* 379 * read page from file, directory or symlink, given a file to nominate the key 380 * to be used 381 */ 382 static int afs_readpage(struct file *file, struct page *page) 383 { 384 struct key *key; 385 int ret; 386 387 if (file) { 388 key = afs_file_key(file); 389 ASSERT(key != NULL); 390 ret = afs_page_filler(key, page); 391 } else { 392 struct inode *inode = page->mapping->host; 393 key = afs_request_key(AFS_FS_S(inode->i_sb)->cell); 394 if (IS_ERR(key)) { 395 ret = PTR_ERR(key); 396 } else { 397 ret = afs_page_filler(key, page); 398 key_put(key); 399 } 400 } 401 return ret; 402 } 403 404 /* 405 * Make pages available as they're filled. 406 */ 407 static void afs_readpages_page_done(struct afs_call *call, struct afs_read *req) 408 { 409 #ifdef CONFIG_AFS_FSCACHE 410 struct afs_vnode *vnode = call->reply[0]; 411 #endif 412 struct page *page = req->pages[req->index]; 413 414 req->pages[req->index] = NULL; 415 SetPageUptodate(page); 416 417 /* send the page to the cache */ 418 #ifdef CONFIG_AFS_FSCACHE 419 if (PageFsCache(page) && 420 fscache_write_page(vnode->cache, page, vnode->status.size, 421 GFP_KERNEL) != 0) { 422 fscache_uncache_page(vnode->cache, page); 423 BUG_ON(PageFsCache(page)); 424 } 425 #endif 426 unlock_page(page); 427 put_page(page); 428 } 429 430 /* 431 * Read a contiguous set of pages. 432 */ 433 static int afs_readpages_one(struct file *file, struct address_space *mapping, 434 struct list_head *pages) 435 { 436 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 437 struct afs_read *req; 438 struct list_head *p; 439 struct page *first, *page; 440 struct key *key = afs_file_key(file); 441 pgoff_t index; 442 int ret, n, i; 443 444 /* Count the number of contiguous pages at the front of the list. Note 445 * that the list goes prev-wards rather than next-wards. 446 */ 447 first = lru_to_page(pages); 448 index = first->index + 1; 449 n = 1; 450 for (p = first->lru.prev; p != pages; p = p->prev) { 451 page = list_entry(p, struct page, lru); 452 if (page->index != index) 453 break; 454 index++; 455 n++; 456 } 457 458 req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *) * n, 459 GFP_NOFS); 460 if (!req) 461 return -ENOMEM; 462 463 refcount_set(&req->usage, 1); 464 req->page_done = afs_readpages_page_done; 465 req->pos = first->index; 466 req->pos <<= PAGE_SHIFT; 467 req->pages = req->array; 468 469 /* Transfer the pages to the request. We add them in until one fails 470 * to add to the LRU and then we stop (as that'll make a hole in the 471 * contiguous run. 472 * 473 * Note that it's possible for the file size to change whilst we're 474 * doing this, but we rely on the server returning less than we asked 475 * for if the file shrank. We also rely on this to deal with a partial 476 * page at the end of the file. 477 */ 478 do { 479 page = lru_to_page(pages); 480 list_del(&page->lru); 481 index = page->index; 482 if (add_to_page_cache_lru(page, mapping, index, 483 readahead_gfp_mask(mapping))) { 484 #ifdef CONFIG_AFS_FSCACHE 485 fscache_uncache_page(vnode->cache, page); 486 #endif 487 put_page(page); 488 break; 489 } 490 491 req->pages[req->nr_pages++] = page; 492 req->len += PAGE_SIZE; 493 } while (req->nr_pages < n); 494 495 if (req->nr_pages == 0) { 496 kfree(req); 497 return 0; 498 } 499 500 ret = afs_fetch_data(vnode, key, req); 501 if (ret < 0) 502 goto error; 503 504 task_io_account_read(PAGE_SIZE * req->nr_pages); 505 afs_put_read(req); 506 return 0; 507 508 error: 509 if (ret == -ENOENT) { 510 _debug("got NOENT from server" 511 " - marking file deleted and stale"); 512 set_bit(AFS_VNODE_DELETED, &vnode->flags); 513 ret = -ESTALE; 514 } 515 516 for (i = 0; i < req->nr_pages; i++) { 517 page = req->pages[i]; 518 if (page) { 519 #ifdef CONFIG_AFS_FSCACHE 520 fscache_uncache_page(vnode->cache, page); 521 #endif 522 SetPageError(page); 523 unlock_page(page); 524 } 525 } 526 527 afs_put_read(req); 528 return ret; 529 } 530 531 /* 532 * read a set of pages 533 */ 534 static int afs_readpages(struct file *file, struct address_space *mapping, 535 struct list_head *pages, unsigned nr_pages) 536 { 537 struct key *key = afs_file_key(file); 538 struct afs_vnode *vnode; 539 int ret = 0; 540 541 _enter("{%d},{%lu},,%d", 542 key_serial(key), mapping->host->i_ino, nr_pages); 543 544 ASSERT(key != NULL); 545 546 vnode = AFS_FS_I(mapping->host); 547 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) { 548 _leave(" = -ESTALE"); 549 return -ESTALE; 550 } 551 552 /* attempt to read as many of the pages as possible */ 553 #ifdef CONFIG_AFS_FSCACHE 554 ret = fscache_read_or_alloc_pages(vnode->cache, 555 mapping, 556 pages, 557 &nr_pages, 558 afs_file_readpage_read_complete, 559 NULL, 560 mapping_gfp_mask(mapping)); 561 #else 562 ret = -ENOBUFS; 563 #endif 564 565 switch (ret) { 566 /* all pages are being read from the cache */ 567 case 0: 568 BUG_ON(!list_empty(pages)); 569 BUG_ON(nr_pages != 0); 570 _leave(" = 0 [reading all]"); 571 return 0; 572 573 /* there were pages that couldn't be read from the cache */ 574 case -ENODATA: 575 case -ENOBUFS: 576 break; 577 578 /* other error */ 579 default: 580 _leave(" = %d", ret); 581 return ret; 582 } 583 584 while (!list_empty(pages)) { 585 ret = afs_readpages_one(file, mapping, pages); 586 if (ret < 0) 587 break; 588 } 589 590 _leave(" = %d [netting]", ret); 591 return ret; 592 } 593 594 /* 595 * invalidate part or all of a page 596 * - release a page and clean up its private data if offset is 0 (indicating 597 * the entire page) 598 */ 599 static void afs_invalidatepage(struct page *page, unsigned int offset, 600 unsigned int length) 601 { 602 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 603 unsigned long priv; 604 605 _enter("{%lu},%u,%u", page->index, offset, length); 606 607 BUG_ON(!PageLocked(page)); 608 609 /* we clean up only if the entire page is being invalidated */ 610 if (offset == 0 && length == PAGE_SIZE) { 611 #ifdef CONFIG_AFS_FSCACHE 612 if (PageFsCache(page)) { 613 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 614 fscache_wait_on_page_write(vnode->cache, page); 615 fscache_uncache_page(vnode->cache, page); 616 } 617 #endif 618 619 if (PagePrivate(page)) { 620 priv = page_private(page); 621 trace_afs_page_dirty(vnode, tracepoint_string("inval"), 622 page->index, priv); 623 set_page_private(page, 0); 624 ClearPagePrivate(page); 625 } 626 } 627 628 _leave(""); 629 } 630 631 /* 632 * release a page and clean up its private state if it's not busy 633 * - return true if the page can now be released, false if not 634 */ 635 static int afs_releasepage(struct page *page, gfp_t gfp_flags) 636 { 637 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 638 unsigned long priv; 639 640 _enter("{{%llx:%llu}[%lu],%lx},%x", 641 vnode->fid.vid, vnode->fid.vnode, page->index, page->flags, 642 gfp_flags); 643 644 /* deny if page is being written to the cache and the caller hasn't 645 * elected to wait */ 646 #ifdef CONFIG_AFS_FSCACHE 647 if (!fscache_maybe_release_page(vnode->cache, page, gfp_flags)) { 648 _leave(" = F [cache busy]"); 649 return 0; 650 } 651 #endif 652 653 if (PagePrivate(page)) { 654 priv = page_private(page); 655 trace_afs_page_dirty(vnode, tracepoint_string("rel"), 656 page->index, priv); 657 set_page_private(page, 0); 658 ClearPagePrivate(page); 659 } 660 661 /* indicate that the page can be released */ 662 _leave(" = T"); 663 return 1; 664 } 665 666 /* 667 * Handle setting up a memory mapping on an AFS file. 668 */ 669 static int afs_file_mmap(struct file *file, struct vm_area_struct *vma) 670 { 671 int ret; 672 673 ret = generic_file_mmap(file, vma); 674 if (ret == 0) 675 vma->vm_ops = &afs_vm_ops; 676 return ret; 677 } 678