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 int ret = 0; 174 175 _enter("{%llx:%llu},", vnode->fid.vid, vnode->fid.vnode); 176 177 if ((file->f_mode & FMODE_WRITE)) 178 ret = vfs_fsync(file, 0); 179 180 file->private_data = NULL; 181 if (af->wb) 182 afs_put_wb_key(af->wb); 183 key_put(af->key); 184 kfree(af); 185 afs_prune_wb_keys(vnode); 186 _leave(" = %d", ret); 187 return ret; 188 } 189 190 /* 191 * Dispose of a ref to a read record. 192 */ 193 void afs_put_read(struct afs_read *req) 194 { 195 int i; 196 197 if (refcount_dec_and_test(&req->usage)) { 198 for (i = 0; i < req->nr_pages; i++) 199 if (req->pages[i]) 200 put_page(req->pages[i]); 201 if (req->pages != req->array) 202 kfree(req->pages); 203 kfree(req); 204 } 205 } 206 207 #ifdef CONFIG_AFS_FSCACHE 208 /* 209 * deal with notification that a page was read from the cache 210 */ 211 static void afs_file_readpage_read_complete(struct page *page, 212 void *data, 213 int error) 214 { 215 _enter("%p,%p,%d", page, data, error); 216 217 /* if the read completes with an error, we just unlock the page and let 218 * the VM reissue the readpage */ 219 if (!error) 220 SetPageUptodate(page); 221 unlock_page(page); 222 } 223 #endif 224 225 /* 226 * Fetch file data from the volume. 227 */ 228 int afs_fetch_data(struct afs_vnode *vnode, struct key *key, struct afs_read *desc) 229 { 230 struct afs_fs_cursor fc; 231 int ret; 232 233 _enter("%s{%llx:%llu.%u},%x,,,", 234 vnode->volume->name, 235 vnode->fid.vid, 236 vnode->fid.vnode, 237 vnode->fid.unique, 238 key_serial(key)); 239 240 ret = -ERESTARTSYS; 241 if (afs_begin_vnode_operation(&fc, vnode, key)) { 242 while (afs_select_fileserver(&fc)) { 243 fc.cb_break = afs_calc_vnode_cb_break(vnode); 244 afs_fs_fetch_data(&fc, desc); 245 } 246 247 afs_check_for_remote_deletion(&fc, fc.vnode); 248 afs_vnode_commit_status(&fc, vnode, fc.cb_break); 249 ret = afs_end_vnode_operation(&fc); 250 } 251 252 if (ret == 0) { 253 afs_stat_v(vnode, n_fetches); 254 atomic_long_add(desc->actual_len, 255 &afs_v2net(vnode)->n_fetch_bytes); 256 } 257 258 _leave(" = %d", ret); 259 return ret; 260 } 261 262 /* 263 * read page from file, directory or symlink, given a key to use 264 */ 265 int afs_page_filler(void *data, struct page *page) 266 { 267 struct inode *inode = page->mapping->host; 268 struct afs_vnode *vnode = AFS_FS_I(inode); 269 struct afs_read *req; 270 struct key *key = data; 271 int ret; 272 273 _enter("{%x},{%lu},{%lu}", key_serial(key), inode->i_ino, page->index); 274 275 BUG_ON(!PageLocked(page)); 276 277 ret = -ESTALE; 278 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) 279 goto error; 280 281 /* is it cached? */ 282 #ifdef CONFIG_AFS_FSCACHE 283 ret = fscache_read_or_alloc_page(vnode->cache, 284 page, 285 afs_file_readpage_read_complete, 286 NULL, 287 GFP_KERNEL); 288 #else 289 ret = -ENOBUFS; 290 #endif 291 switch (ret) { 292 /* read BIO submitted (page in cache) */ 293 case 0: 294 break; 295 296 /* page not yet cached */ 297 case -ENODATA: 298 _debug("cache said ENODATA"); 299 goto go_on; 300 301 /* page will not be cached */ 302 case -ENOBUFS: 303 _debug("cache said ENOBUFS"); 304 305 /* fall through */ 306 default: 307 go_on: 308 req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *), 309 GFP_KERNEL); 310 if (!req) 311 goto enomem; 312 313 /* We request a full page. If the page is a partial one at the 314 * end of the file, the server will return a short read and the 315 * unmarshalling code will clear the unfilled space. 316 */ 317 refcount_set(&req->usage, 1); 318 req->pos = (loff_t)page->index << PAGE_SHIFT; 319 req->len = PAGE_SIZE; 320 req->nr_pages = 1; 321 req->pages = req->array; 322 req->pages[0] = page; 323 get_page(page); 324 325 /* read the contents of the file from the server into the 326 * page */ 327 ret = afs_fetch_data(vnode, key, req); 328 afs_put_read(req); 329 330 if (ret < 0) { 331 if (ret == -ENOENT) { 332 _debug("got NOENT from server" 333 " - marking file deleted and stale"); 334 set_bit(AFS_VNODE_DELETED, &vnode->flags); 335 ret = -ESTALE; 336 } 337 338 #ifdef CONFIG_AFS_FSCACHE 339 fscache_uncache_page(vnode->cache, page); 340 #endif 341 BUG_ON(PageFsCache(page)); 342 343 if (ret == -EINTR || 344 ret == -ENOMEM || 345 ret == -ERESTARTSYS || 346 ret == -EAGAIN) 347 goto error; 348 goto io_error; 349 } 350 351 SetPageUptodate(page); 352 353 /* send the page to the cache */ 354 #ifdef CONFIG_AFS_FSCACHE 355 if (PageFsCache(page) && 356 fscache_write_page(vnode->cache, page, vnode->status.size, 357 GFP_KERNEL) != 0) { 358 fscache_uncache_page(vnode->cache, page); 359 BUG_ON(PageFsCache(page)); 360 } 361 #endif 362 unlock_page(page); 363 } 364 365 _leave(" = 0"); 366 return 0; 367 368 io_error: 369 SetPageError(page); 370 goto error; 371 enomem: 372 ret = -ENOMEM; 373 error: 374 unlock_page(page); 375 _leave(" = %d", ret); 376 return ret; 377 } 378 379 /* 380 * read page from file, directory or symlink, given a file to nominate the key 381 * to be used 382 */ 383 static int afs_readpage(struct file *file, struct page *page) 384 { 385 struct key *key; 386 int ret; 387 388 if (file) { 389 key = afs_file_key(file); 390 ASSERT(key != NULL); 391 ret = afs_page_filler(key, page); 392 } else { 393 struct inode *inode = page->mapping->host; 394 key = afs_request_key(AFS_FS_S(inode->i_sb)->cell); 395 if (IS_ERR(key)) { 396 ret = PTR_ERR(key); 397 } else { 398 ret = afs_page_filler(key, page); 399 key_put(key); 400 } 401 } 402 return ret; 403 } 404 405 /* 406 * Make pages available as they're filled. 407 */ 408 static void afs_readpages_page_done(struct afs_call *call, struct afs_read *req) 409 { 410 #ifdef CONFIG_AFS_FSCACHE 411 struct afs_vnode *vnode = call->reply[0]; 412 #endif 413 struct page *page = req->pages[req->index]; 414 415 req->pages[req->index] = NULL; 416 SetPageUptodate(page); 417 418 /* send the page to the cache */ 419 #ifdef CONFIG_AFS_FSCACHE 420 if (PageFsCache(page) && 421 fscache_write_page(vnode->cache, page, vnode->status.size, 422 GFP_KERNEL) != 0) { 423 fscache_uncache_page(vnode->cache, page); 424 BUG_ON(PageFsCache(page)); 425 } 426 #endif 427 unlock_page(page); 428 put_page(page); 429 } 430 431 /* 432 * Read a contiguous set of pages. 433 */ 434 static int afs_readpages_one(struct file *file, struct address_space *mapping, 435 struct list_head *pages) 436 { 437 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 438 struct afs_read *req; 439 struct list_head *p; 440 struct page *first, *page; 441 struct key *key = afs_file_key(file); 442 pgoff_t index; 443 int ret, n, i; 444 445 /* Count the number of contiguous pages at the front of the list. Note 446 * that the list goes prev-wards rather than next-wards. 447 */ 448 first = lru_to_page(pages); 449 index = first->index + 1; 450 n = 1; 451 for (p = first->lru.prev; p != pages; p = p->prev) { 452 page = list_entry(p, struct page, lru); 453 if (page->index != index) 454 break; 455 index++; 456 n++; 457 } 458 459 req = kzalloc(sizeof(struct afs_read) + sizeof(struct page *) * n, 460 GFP_NOFS); 461 if (!req) 462 return -ENOMEM; 463 464 refcount_set(&req->usage, 1); 465 req->page_done = afs_readpages_page_done; 466 req->pos = first->index; 467 req->pos <<= PAGE_SHIFT; 468 req->pages = req->array; 469 470 /* Transfer the pages to the request. We add them in until one fails 471 * to add to the LRU and then we stop (as that'll make a hole in the 472 * contiguous run. 473 * 474 * Note that it's possible for the file size to change whilst we're 475 * doing this, but we rely on the server returning less than we asked 476 * for if the file shrank. We also rely on this to deal with a partial 477 * page at the end of the file. 478 */ 479 do { 480 page = lru_to_page(pages); 481 list_del(&page->lru); 482 index = page->index; 483 if (add_to_page_cache_lru(page, mapping, index, 484 readahead_gfp_mask(mapping))) { 485 #ifdef CONFIG_AFS_FSCACHE 486 fscache_uncache_page(vnode->cache, page); 487 #endif 488 put_page(page); 489 break; 490 } 491 492 req->pages[req->nr_pages++] = page; 493 req->len += PAGE_SIZE; 494 } while (req->nr_pages < n); 495 496 if (req->nr_pages == 0) { 497 kfree(req); 498 return 0; 499 } 500 501 ret = afs_fetch_data(vnode, key, req); 502 if (ret < 0) 503 goto error; 504 505 task_io_account_read(PAGE_SIZE * req->nr_pages); 506 afs_put_read(req); 507 return 0; 508 509 error: 510 if (ret == -ENOENT) { 511 _debug("got NOENT from server" 512 " - marking file deleted and stale"); 513 set_bit(AFS_VNODE_DELETED, &vnode->flags); 514 ret = -ESTALE; 515 } 516 517 for (i = 0; i < req->nr_pages; i++) { 518 page = req->pages[i]; 519 if (page) { 520 #ifdef CONFIG_AFS_FSCACHE 521 fscache_uncache_page(vnode->cache, page); 522 #endif 523 SetPageError(page); 524 unlock_page(page); 525 } 526 } 527 528 afs_put_read(req); 529 return ret; 530 } 531 532 /* 533 * read a set of pages 534 */ 535 static int afs_readpages(struct file *file, struct address_space *mapping, 536 struct list_head *pages, unsigned nr_pages) 537 { 538 struct key *key = afs_file_key(file); 539 struct afs_vnode *vnode; 540 int ret = 0; 541 542 _enter("{%d},{%lu},,%d", 543 key_serial(key), mapping->host->i_ino, nr_pages); 544 545 ASSERT(key != NULL); 546 547 vnode = AFS_FS_I(mapping->host); 548 if (test_bit(AFS_VNODE_DELETED, &vnode->flags)) { 549 _leave(" = -ESTALE"); 550 return -ESTALE; 551 } 552 553 /* attempt to read as many of the pages as possible */ 554 #ifdef CONFIG_AFS_FSCACHE 555 ret = fscache_read_or_alloc_pages(vnode->cache, 556 mapping, 557 pages, 558 &nr_pages, 559 afs_file_readpage_read_complete, 560 NULL, 561 mapping_gfp_mask(mapping)); 562 #else 563 ret = -ENOBUFS; 564 #endif 565 566 switch (ret) { 567 /* all pages are being read from the cache */ 568 case 0: 569 BUG_ON(!list_empty(pages)); 570 BUG_ON(nr_pages != 0); 571 _leave(" = 0 [reading all]"); 572 return 0; 573 574 /* there were pages that couldn't be read from the cache */ 575 case -ENODATA: 576 case -ENOBUFS: 577 break; 578 579 /* other error */ 580 default: 581 _leave(" = %d", ret); 582 return ret; 583 } 584 585 while (!list_empty(pages)) { 586 ret = afs_readpages_one(file, mapping, pages); 587 if (ret < 0) 588 break; 589 } 590 591 _leave(" = %d [netting]", ret); 592 return ret; 593 } 594 595 /* 596 * invalidate part or all of a page 597 * - release a page and clean up its private data if offset is 0 (indicating 598 * the entire page) 599 */ 600 static void afs_invalidatepage(struct page *page, unsigned int offset, 601 unsigned int length) 602 { 603 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 604 unsigned long priv; 605 606 _enter("{%lu},%u,%u", page->index, offset, length); 607 608 BUG_ON(!PageLocked(page)); 609 610 /* we clean up only if the entire page is being invalidated */ 611 if (offset == 0 && length == PAGE_SIZE) { 612 #ifdef CONFIG_AFS_FSCACHE 613 if (PageFsCache(page)) { 614 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 615 fscache_wait_on_page_write(vnode->cache, page); 616 fscache_uncache_page(vnode->cache, page); 617 } 618 #endif 619 620 if (PagePrivate(page)) { 621 priv = page_private(page); 622 trace_afs_page_dirty(vnode, tracepoint_string("inval"), 623 page->index, priv); 624 set_page_private(page, 0); 625 ClearPagePrivate(page); 626 } 627 } 628 629 _leave(""); 630 } 631 632 /* 633 * release a page and clean up its private state if it's not busy 634 * - return true if the page can now be released, false if not 635 */ 636 static int afs_releasepage(struct page *page, gfp_t gfp_flags) 637 { 638 struct afs_vnode *vnode = AFS_FS_I(page->mapping->host); 639 unsigned long priv; 640 641 _enter("{{%llx:%llu}[%lu],%lx},%x", 642 vnode->fid.vid, vnode->fid.vnode, page->index, page->flags, 643 gfp_flags); 644 645 /* deny if page is being written to the cache and the caller hasn't 646 * elected to wait */ 647 #ifdef CONFIG_AFS_FSCACHE 648 if (!fscache_maybe_release_page(vnode->cache, page, gfp_flags)) { 649 _leave(" = F [cache busy]"); 650 return 0; 651 } 652 #endif 653 654 if (PagePrivate(page)) { 655 priv = page_private(page); 656 trace_afs_page_dirty(vnode, tracepoint_string("rel"), 657 page->index, priv); 658 set_page_private(page, 0); 659 ClearPagePrivate(page); 660 } 661 662 /* indicate that the page can be released */ 663 _leave(" = T"); 664 return 1; 665 } 666 667 /* 668 * Handle setting up a memory mapping on an AFS file. 669 */ 670 static int afs_file_mmap(struct file *file, struct vm_area_struct *vma) 671 { 672 int ret; 673 674 ret = generic_file_mmap(file, vma); 675 if (ret == 0) 676 vma->vm_ops = &afs_vm_ops; 677 return ret; 678 } 679