1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* handling of writes to regular files and writing back to the server 3 * 4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. 5 * Written by David Howells (dhowells@redhat.com) 6 */ 7 8 #include <linux/backing-dev.h> 9 #include <linux/slab.h> 10 #include <linux/fs.h> 11 #include <linux/pagemap.h> 12 #include <linux/writeback.h> 13 #include <linux/pagevec.h> 14 #include <linux/netfs.h> 15 #include "internal.h" 16 17 static void afs_write_to_cache(struct afs_vnode *vnode, loff_t start, size_t len, 18 loff_t i_size, bool caching); 19 20 #ifdef CONFIG_AFS_FSCACHE 21 /* 22 * Mark a page as having been made dirty and thus needing writeback. We also 23 * need to pin the cache object to write back to. 24 */ 25 bool afs_dirty_folio(struct address_space *mapping, struct folio *folio) 26 { 27 return fscache_dirty_folio(mapping, folio, 28 afs_vnode_cache(AFS_FS_I(mapping->host))); 29 } 30 static void afs_folio_start_fscache(bool caching, struct folio *folio) 31 { 32 if (caching) 33 folio_start_fscache(folio); 34 } 35 #else 36 static void afs_folio_start_fscache(bool caching, struct folio *folio) 37 { 38 } 39 #endif 40 41 /* 42 * prepare to perform part of a write to a page 43 */ 44 int afs_write_begin(struct file *file, struct address_space *mapping, 45 loff_t pos, unsigned len, unsigned flags, 46 struct page **_page, void **fsdata) 47 { 48 struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); 49 struct folio *folio; 50 unsigned long priv; 51 unsigned f, from; 52 unsigned t, to; 53 pgoff_t index; 54 int ret; 55 56 _enter("{%llx:%llu},%llx,%x", 57 vnode->fid.vid, vnode->fid.vnode, pos, len); 58 59 /* Prefetch area to be written into the cache if we're caching this 60 * file. We need to do this before we get a lock on the page in case 61 * there's more than one writer competing for the same cache block. 62 */ 63 ret = netfs_write_begin(file, mapping, pos, len, flags, &folio, fsdata, 64 &afs_req_ops, NULL); 65 if (ret < 0) 66 return ret; 67 68 index = folio_index(folio); 69 from = pos - index * PAGE_SIZE; 70 to = from + len; 71 72 try_again: 73 /* See if this page is already partially written in a way that we can 74 * merge the new write with. 75 */ 76 if (folio_test_private(folio)) { 77 priv = (unsigned long)folio_get_private(folio); 78 f = afs_folio_dirty_from(folio, priv); 79 t = afs_folio_dirty_to(folio, priv); 80 ASSERTCMP(f, <=, t); 81 82 if (folio_test_writeback(folio)) { 83 trace_afs_folio_dirty(vnode, tracepoint_string("alrdy"), folio); 84 goto flush_conflicting_write; 85 } 86 /* If the file is being filled locally, allow inter-write 87 * spaces to be merged into writes. If it's not, only write 88 * back what the user gives us. 89 */ 90 if (!test_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags) && 91 (to < f || from > t)) 92 goto flush_conflicting_write; 93 } 94 95 *_page = &folio->page; 96 _leave(" = 0"); 97 return 0; 98 99 /* The previous write and this write aren't adjacent or overlapping, so 100 * flush the page out. 101 */ 102 flush_conflicting_write: 103 _debug("flush conflict"); 104 ret = folio_write_one(folio); 105 if (ret < 0) 106 goto error; 107 108 ret = folio_lock_killable(folio); 109 if (ret < 0) 110 goto error; 111 goto try_again; 112 113 error: 114 folio_put(folio); 115 _leave(" = %d", ret); 116 return ret; 117 } 118 119 /* 120 * finalise part of a write to a page 121 */ 122 int afs_write_end(struct file *file, struct address_space *mapping, 123 loff_t pos, unsigned len, unsigned copied, 124 struct page *subpage, void *fsdata) 125 { 126 struct folio *folio = page_folio(subpage); 127 struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); 128 unsigned long priv; 129 unsigned int f, from = offset_in_folio(folio, pos); 130 unsigned int t, to = from + copied; 131 loff_t i_size, write_end_pos; 132 133 _enter("{%llx:%llu},{%lx}", 134 vnode->fid.vid, vnode->fid.vnode, folio_index(folio)); 135 136 if (!folio_test_uptodate(folio)) { 137 if (copied < len) { 138 copied = 0; 139 goto out; 140 } 141 142 folio_mark_uptodate(folio); 143 } 144 145 if (copied == 0) 146 goto out; 147 148 write_end_pos = pos + copied; 149 150 i_size = i_size_read(&vnode->vfs_inode); 151 if (write_end_pos > i_size) { 152 write_seqlock(&vnode->cb_lock); 153 i_size = i_size_read(&vnode->vfs_inode); 154 if (write_end_pos > i_size) 155 afs_set_i_size(vnode, write_end_pos); 156 write_sequnlock(&vnode->cb_lock); 157 fscache_update_cookie(afs_vnode_cache(vnode), NULL, &write_end_pos); 158 } 159 160 if (folio_test_private(folio)) { 161 priv = (unsigned long)folio_get_private(folio); 162 f = afs_folio_dirty_from(folio, priv); 163 t = afs_folio_dirty_to(folio, priv); 164 if (from < f) 165 f = from; 166 if (to > t) 167 t = to; 168 priv = afs_folio_dirty(folio, f, t); 169 folio_change_private(folio, (void *)priv); 170 trace_afs_folio_dirty(vnode, tracepoint_string("dirty+"), folio); 171 } else { 172 priv = afs_folio_dirty(folio, from, to); 173 folio_attach_private(folio, (void *)priv); 174 trace_afs_folio_dirty(vnode, tracepoint_string("dirty"), folio); 175 } 176 177 if (folio_mark_dirty(folio)) 178 _debug("dirtied %lx", folio_index(folio)); 179 180 out: 181 folio_unlock(folio); 182 folio_put(folio); 183 return copied; 184 } 185 186 /* 187 * kill all the pages in the given range 188 */ 189 static void afs_kill_pages(struct address_space *mapping, 190 loff_t start, loff_t len) 191 { 192 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 193 struct folio *folio; 194 pgoff_t index = start / PAGE_SIZE; 195 pgoff_t last = (start + len - 1) / PAGE_SIZE, next; 196 197 _enter("{%llx:%llu},%llx @%llx", 198 vnode->fid.vid, vnode->fid.vnode, len, start); 199 200 do { 201 _debug("kill %lx (to %lx)", index, last); 202 203 folio = filemap_get_folio(mapping, index); 204 if (!folio) { 205 next = index + 1; 206 continue; 207 } 208 209 next = folio_next_index(folio); 210 211 folio_clear_uptodate(folio); 212 folio_end_writeback(folio); 213 folio_lock(folio); 214 generic_error_remove_page(mapping, &folio->page); 215 folio_unlock(folio); 216 folio_put(folio); 217 218 } while (index = next, index <= last); 219 220 _leave(""); 221 } 222 223 /* 224 * Redirty all the pages in a given range. 225 */ 226 static void afs_redirty_pages(struct writeback_control *wbc, 227 struct address_space *mapping, 228 loff_t start, loff_t len) 229 { 230 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 231 struct folio *folio; 232 pgoff_t index = start / PAGE_SIZE; 233 pgoff_t last = (start + len - 1) / PAGE_SIZE, next; 234 235 _enter("{%llx:%llu},%llx @%llx", 236 vnode->fid.vid, vnode->fid.vnode, len, start); 237 238 do { 239 _debug("redirty %llx @%llx", len, start); 240 241 folio = filemap_get_folio(mapping, index); 242 if (!folio) { 243 next = index + 1; 244 continue; 245 } 246 247 next = index + folio_nr_pages(folio); 248 folio_redirty_for_writepage(wbc, folio); 249 folio_end_writeback(folio); 250 folio_put(folio); 251 } while (index = next, index <= last); 252 253 _leave(""); 254 } 255 256 /* 257 * completion of write to server 258 */ 259 static void afs_pages_written_back(struct afs_vnode *vnode, loff_t start, unsigned int len) 260 { 261 struct address_space *mapping = vnode->vfs_inode.i_mapping; 262 struct folio *folio; 263 pgoff_t end; 264 265 XA_STATE(xas, &mapping->i_pages, start / PAGE_SIZE); 266 267 _enter("{%llx:%llu},{%x @%llx}", 268 vnode->fid.vid, vnode->fid.vnode, len, start); 269 270 rcu_read_lock(); 271 272 end = (start + len - 1) / PAGE_SIZE; 273 xas_for_each(&xas, folio, end) { 274 if (!folio_test_writeback(folio)) { 275 kdebug("bad %x @%llx page %lx %lx", 276 len, start, folio_index(folio), end); 277 ASSERT(folio_test_writeback(folio)); 278 } 279 280 trace_afs_folio_dirty(vnode, tracepoint_string("clear"), folio); 281 folio_detach_private(folio); 282 folio_end_writeback(folio); 283 } 284 285 rcu_read_unlock(); 286 287 afs_prune_wb_keys(vnode); 288 _leave(""); 289 } 290 291 /* 292 * Find a key to use for the writeback. We cached the keys used to author the 293 * writes on the vnode. *_wbk will contain the last writeback key used or NULL 294 * and we need to start from there if it's set. 295 */ 296 static int afs_get_writeback_key(struct afs_vnode *vnode, 297 struct afs_wb_key **_wbk) 298 { 299 struct afs_wb_key *wbk = NULL; 300 struct list_head *p; 301 int ret = -ENOKEY, ret2; 302 303 spin_lock(&vnode->wb_lock); 304 if (*_wbk) 305 p = (*_wbk)->vnode_link.next; 306 else 307 p = vnode->wb_keys.next; 308 309 while (p != &vnode->wb_keys) { 310 wbk = list_entry(p, struct afs_wb_key, vnode_link); 311 _debug("wbk %u", key_serial(wbk->key)); 312 ret2 = key_validate(wbk->key); 313 if (ret2 == 0) { 314 refcount_inc(&wbk->usage); 315 _debug("USE WB KEY %u", key_serial(wbk->key)); 316 break; 317 } 318 319 wbk = NULL; 320 if (ret == -ENOKEY) 321 ret = ret2; 322 p = p->next; 323 } 324 325 spin_unlock(&vnode->wb_lock); 326 if (*_wbk) 327 afs_put_wb_key(*_wbk); 328 *_wbk = wbk; 329 return 0; 330 } 331 332 static void afs_store_data_success(struct afs_operation *op) 333 { 334 struct afs_vnode *vnode = op->file[0].vnode; 335 336 op->ctime = op->file[0].scb.status.mtime_client; 337 afs_vnode_commit_status(op, &op->file[0]); 338 if (op->error == 0) { 339 if (!op->store.laundering) 340 afs_pages_written_back(vnode, op->store.pos, op->store.size); 341 afs_stat_v(vnode, n_stores); 342 atomic_long_add(op->store.size, &afs_v2net(vnode)->n_store_bytes); 343 } 344 } 345 346 static const struct afs_operation_ops afs_store_data_operation = { 347 .issue_afs_rpc = afs_fs_store_data, 348 .issue_yfs_rpc = yfs_fs_store_data, 349 .success = afs_store_data_success, 350 }; 351 352 /* 353 * write to a file 354 */ 355 static int afs_store_data(struct afs_vnode *vnode, struct iov_iter *iter, loff_t pos, 356 bool laundering) 357 { 358 struct afs_operation *op; 359 struct afs_wb_key *wbk = NULL; 360 loff_t size = iov_iter_count(iter), i_size; 361 int ret = -ENOKEY; 362 363 _enter("%s{%llx:%llu.%u},%llx,%llx", 364 vnode->volume->name, 365 vnode->fid.vid, 366 vnode->fid.vnode, 367 vnode->fid.unique, 368 size, pos); 369 370 ret = afs_get_writeback_key(vnode, &wbk); 371 if (ret) { 372 _leave(" = %d [no keys]", ret); 373 return ret; 374 } 375 376 op = afs_alloc_operation(wbk->key, vnode->volume); 377 if (IS_ERR(op)) { 378 afs_put_wb_key(wbk); 379 return -ENOMEM; 380 } 381 382 i_size = i_size_read(&vnode->vfs_inode); 383 384 afs_op_set_vnode(op, 0, vnode); 385 op->file[0].dv_delta = 1; 386 op->file[0].modification = true; 387 op->store.write_iter = iter; 388 op->store.pos = pos; 389 op->store.size = size; 390 op->store.i_size = max(pos + size, i_size); 391 op->store.laundering = laundering; 392 op->mtime = vnode->vfs_inode.i_mtime; 393 op->flags |= AFS_OPERATION_UNINTR; 394 op->ops = &afs_store_data_operation; 395 396 try_next_key: 397 afs_begin_vnode_operation(op); 398 afs_wait_for_operation(op); 399 400 switch (op->error) { 401 case -EACCES: 402 case -EPERM: 403 case -ENOKEY: 404 case -EKEYEXPIRED: 405 case -EKEYREJECTED: 406 case -EKEYREVOKED: 407 _debug("next"); 408 409 ret = afs_get_writeback_key(vnode, &wbk); 410 if (ret == 0) { 411 key_put(op->key); 412 op->key = key_get(wbk->key); 413 goto try_next_key; 414 } 415 break; 416 } 417 418 afs_put_wb_key(wbk); 419 _leave(" = %d", op->error); 420 return afs_put_operation(op); 421 } 422 423 /* 424 * Extend the region to be written back to include subsequent contiguously 425 * dirty pages if possible, but don't sleep while doing so. 426 * 427 * If this page holds new content, then we can include filler zeros in the 428 * writeback. 429 */ 430 static void afs_extend_writeback(struct address_space *mapping, 431 struct afs_vnode *vnode, 432 long *_count, 433 loff_t start, 434 loff_t max_len, 435 bool new_content, 436 bool caching, 437 unsigned int *_len) 438 { 439 struct pagevec pvec; 440 struct folio *folio; 441 unsigned long priv; 442 unsigned int psize, filler = 0; 443 unsigned int f, t; 444 loff_t len = *_len; 445 pgoff_t index = (start + len) / PAGE_SIZE; 446 bool stop = true; 447 unsigned int i; 448 449 XA_STATE(xas, &mapping->i_pages, index); 450 pagevec_init(&pvec); 451 452 do { 453 /* Firstly, we gather up a batch of contiguous dirty pages 454 * under the RCU read lock - but we can't clear the dirty flags 455 * there if any of those pages are mapped. 456 */ 457 rcu_read_lock(); 458 459 xas_for_each(&xas, folio, ULONG_MAX) { 460 stop = true; 461 if (xas_retry(&xas, folio)) 462 continue; 463 if (xa_is_value(folio)) 464 break; 465 if (folio_index(folio) != index) 466 break; 467 468 if (!folio_try_get_rcu(folio)) { 469 xas_reset(&xas); 470 continue; 471 } 472 473 /* Has the page moved or been split? */ 474 if (unlikely(folio != xas_reload(&xas))) { 475 folio_put(folio); 476 break; 477 } 478 479 if (!folio_trylock(folio)) { 480 folio_put(folio); 481 break; 482 } 483 if (!folio_test_dirty(folio) || 484 folio_test_writeback(folio) || 485 folio_test_fscache(folio)) { 486 folio_unlock(folio); 487 folio_put(folio); 488 break; 489 } 490 491 psize = folio_size(folio); 492 priv = (unsigned long)folio_get_private(folio); 493 f = afs_folio_dirty_from(folio, priv); 494 t = afs_folio_dirty_to(folio, priv); 495 if (f != 0 && !new_content) { 496 folio_unlock(folio); 497 folio_put(folio); 498 break; 499 } 500 501 len += filler + t; 502 filler = psize - t; 503 if (len >= max_len || *_count <= 0) 504 stop = true; 505 else if (t == psize || new_content) 506 stop = false; 507 508 index += folio_nr_pages(folio); 509 if (!pagevec_add(&pvec, &folio->page)) 510 break; 511 if (stop) 512 break; 513 } 514 515 if (!stop) 516 xas_pause(&xas); 517 rcu_read_unlock(); 518 519 /* Now, if we obtained any pages, we can shift them to being 520 * writable and mark them for caching. 521 */ 522 if (!pagevec_count(&pvec)) 523 break; 524 525 for (i = 0; i < pagevec_count(&pvec); i++) { 526 folio = page_folio(pvec.pages[i]); 527 trace_afs_folio_dirty(vnode, tracepoint_string("store+"), folio); 528 529 if (!folio_clear_dirty_for_io(folio)) 530 BUG(); 531 if (folio_start_writeback(folio)) 532 BUG(); 533 afs_folio_start_fscache(caching, folio); 534 535 *_count -= folio_nr_pages(folio); 536 folio_unlock(folio); 537 } 538 539 pagevec_release(&pvec); 540 cond_resched(); 541 } while (!stop); 542 543 *_len = len; 544 } 545 546 /* 547 * Synchronously write back the locked page and any subsequent non-locked dirty 548 * pages. 549 */ 550 static ssize_t afs_write_back_from_locked_folio(struct address_space *mapping, 551 struct writeback_control *wbc, 552 struct folio *folio, 553 loff_t start, loff_t end) 554 { 555 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 556 struct iov_iter iter; 557 unsigned long priv; 558 unsigned int offset, to, len, max_len; 559 loff_t i_size = i_size_read(&vnode->vfs_inode); 560 bool new_content = test_bit(AFS_VNODE_NEW_CONTENT, &vnode->flags); 561 bool caching = fscache_cookie_enabled(afs_vnode_cache(vnode)); 562 long count = wbc->nr_to_write; 563 int ret; 564 565 _enter(",%lx,%llx-%llx", folio_index(folio), start, end); 566 567 if (folio_start_writeback(folio)) 568 BUG(); 569 afs_folio_start_fscache(caching, folio); 570 571 count -= folio_nr_pages(folio); 572 573 /* Find all consecutive lockable dirty pages that have contiguous 574 * written regions, stopping when we find a page that is not 575 * immediately lockable, is not dirty or is missing, or we reach the 576 * end of the range. 577 */ 578 priv = (unsigned long)folio_get_private(folio); 579 offset = afs_folio_dirty_from(folio, priv); 580 to = afs_folio_dirty_to(folio, priv); 581 trace_afs_folio_dirty(vnode, tracepoint_string("store"), folio); 582 583 len = to - offset; 584 start += offset; 585 if (start < i_size) { 586 /* Trim the write to the EOF; the extra data is ignored. Also 587 * put an upper limit on the size of a single storedata op. 588 */ 589 max_len = 65536 * 4096; 590 max_len = min_t(unsigned long long, max_len, end - start + 1); 591 max_len = min_t(unsigned long long, max_len, i_size - start); 592 593 if (len < max_len && 594 (to == folio_size(folio) || new_content)) 595 afs_extend_writeback(mapping, vnode, &count, 596 start, max_len, new_content, 597 caching, &len); 598 len = min_t(loff_t, len, max_len); 599 } 600 601 /* We now have a contiguous set of dirty pages, each with writeback 602 * set; the first page is still locked at this point, but all the rest 603 * have been unlocked. 604 */ 605 folio_unlock(folio); 606 607 if (start < i_size) { 608 _debug("write back %x @%llx [%llx]", len, start, i_size); 609 610 /* Speculatively write to the cache. We have to fix this up 611 * later if the store fails. 612 */ 613 afs_write_to_cache(vnode, start, len, i_size, caching); 614 615 iov_iter_xarray(&iter, WRITE, &mapping->i_pages, start, len); 616 ret = afs_store_data(vnode, &iter, start, false); 617 } else { 618 _debug("write discard %x @%llx [%llx]", len, start, i_size); 619 620 /* The dirty region was entirely beyond the EOF. */ 621 fscache_clear_page_bits(afs_vnode_cache(vnode), 622 mapping, start, len, caching); 623 afs_pages_written_back(vnode, start, len); 624 ret = 0; 625 } 626 627 switch (ret) { 628 case 0: 629 wbc->nr_to_write = count; 630 ret = len; 631 break; 632 633 default: 634 pr_notice("kAFS: Unexpected error from FS.StoreData %d\n", ret); 635 fallthrough; 636 case -EACCES: 637 case -EPERM: 638 case -ENOKEY: 639 case -EKEYEXPIRED: 640 case -EKEYREJECTED: 641 case -EKEYREVOKED: 642 afs_redirty_pages(wbc, mapping, start, len); 643 mapping_set_error(mapping, ret); 644 break; 645 646 case -EDQUOT: 647 case -ENOSPC: 648 afs_redirty_pages(wbc, mapping, start, len); 649 mapping_set_error(mapping, -ENOSPC); 650 break; 651 652 case -EROFS: 653 case -EIO: 654 case -EREMOTEIO: 655 case -EFBIG: 656 case -ENOENT: 657 case -ENOMEDIUM: 658 case -ENXIO: 659 trace_afs_file_error(vnode, ret, afs_file_error_writeback_fail); 660 afs_kill_pages(mapping, start, len); 661 mapping_set_error(mapping, ret); 662 break; 663 } 664 665 _leave(" = %d", ret); 666 return ret; 667 } 668 669 /* 670 * write a page back to the server 671 * - the caller locked the page for us 672 */ 673 int afs_writepage(struct page *subpage, struct writeback_control *wbc) 674 { 675 struct folio *folio = page_folio(subpage); 676 ssize_t ret; 677 loff_t start; 678 679 _enter("{%lx},", folio_index(folio)); 680 681 #ifdef CONFIG_AFS_FSCACHE 682 folio_wait_fscache(folio); 683 #endif 684 685 start = folio_index(folio) * PAGE_SIZE; 686 ret = afs_write_back_from_locked_folio(folio_mapping(folio), wbc, 687 folio, start, LLONG_MAX - start); 688 if (ret < 0) { 689 _leave(" = %zd", ret); 690 return ret; 691 } 692 693 _leave(" = 0"); 694 return 0; 695 } 696 697 /* 698 * write a region of pages back to the server 699 */ 700 static int afs_writepages_region(struct address_space *mapping, 701 struct writeback_control *wbc, 702 loff_t start, loff_t end, loff_t *_next) 703 { 704 struct folio *folio; 705 struct page *head_page; 706 ssize_t ret; 707 int n; 708 709 _enter("%llx,%llx,", start, end); 710 711 do { 712 pgoff_t index = start / PAGE_SIZE; 713 714 n = find_get_pages_range_tag(mapping, &index, end / PAGE_SIZE, 715 PAGECACHE_TAG_DIRTY, 1, &head_page); 716 if (!n) 717 break; 718 719 folio = page_folio(head_page); 720 start = folio_pos(folio); /* May regress with THPs */ 721 722 _debug("wback %lx", folio_index(folio)); 723 724 /* At this point we hold neither the i_pages lock nor the 725 * page lock: the page may be truncated or invalidated 726 * (changing page->mapping to NULL), or even swizzled 727 * back from swapper_space to tmpfs file mapping 728 */ 729 if (wbc->sync_mode != WB_SYNC_NONE) { 730 ret = folio_lock_killable(folio); 731 if (ret < 0) { 732 folio_put(folio); 733 return ret; 734 } 735 } else { 736 if (!folio_trylock(folio)) { 737 folio_put(folio); 738 return 0; 739 } 740 } 741 742 if (folio_mapping(folio) != mapping || 743 !folio_test_dirty(folio)) { 744 start += folio_size(folio); 745 folio_unlock(folio); 746 folio_put(folio); 747 continue; 748 } 749 750 if (folio_test_writeback(folio) || 751 folio_test_fscache(folio)) { 752 folio_unlock(folio); 753 if (wbc->sync_mode != WB_SYNC_NONE) { 754 folio_wait_writeback(folio); 755 #ifdef CONFIG_AFS_FSCACHE 756 folio_wait_fscache(folio); 757 #endif 758 } 759 folio_put(folio); 760 continue; 761 } 762 763 if (!folio_clear_dirty_for_io(folio)) 764 BUG(); 765 ret = afs_write_back_from_locked_folio(mapping, wbc, folio, start, end); 766 folio_put(folio); 767 if (ret < 0) { 768 _leave(" = %zd", ret); 769 return ret; 770 } 771 772 start += ret; 773 774 cond_resched(); 775 } while (wbc->nr_to_write > 0); 776 777 *_next = start; 778 _leave(" = 0 [%llx]", *_next); 779 return 0; 780 } 781 782 /* 783 * write some of the pending data back to the server 784 */ 785 int afs_writepages(struct address_space *mapping, 786 struct writeback_control *wbc) 787 { 788 struct afs_vnode *vnode = AFS_FS_I(mapping->host); 789 loff_t start, next; 790 int ret; 791 792 _enter(""); 793 794 /* We have to be careful as we can end up racing with setattr() 795 * truncating the pagecache since the caller doesn't take a lock here 796 * to prevent it. 797 */ 798 if (wbc->sync_mode == WB_SYNC_ALL) 799 down_read(&vnode->validate_lock); 800 else if (!down_read_trylock(&vnode->validate_lock)) 801 return 0; 802 803 if (wbc->range_cyclic) { 804 start = mapping->writeback_index * PAGE_SIZE; 805 ret = afs_writepages_region(mapping, wbc, start, LLONG_MAX, &next); 806 if (ret == 0) { 807 mapping->writeback_index = next / PAGE_SIZE; 808 if (start > 0 && wbc->nr_to_write > 0) { 809 ret = afs_writepages_region(mapping, wbc, 0, 810 start, &next); 811 if (ret == 0) 812 mapping->writeback_index = 813 next / PAGE_SIZE; 814 } 815 } 816 } else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) { 817 ret = afs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next); 818 if (wbc->nr_to_write > 0 && ret == 0) 819 mapping->writeback_index = next / PAGE_SIZE; 820 } else { 821 ret = afs_writepages_region(mapping, wbc, 822 wbc->range_start, wbc->range_end, &next); 823 } 824 825 up_read(&vnode->validate_lock); 826 _leave(" = %d", ret); 827 return ret; 828 } 829 830 /* 831 * write to an AFS file 832 */ 833 ssize_t afs_file_write(struct kiocb *iocb, struct iov_iter *from) 834 { 835 struct afs_vnode *vnode = AFS_FS_I(file_inode(iocb->ki_filp)); 836 struct afs_file *af = iocb->ki_filp->private_data; 837 ssize_t result; 838 size_t count = iov_iter_count(from); 839 840 _enter("{%llx:%llu},{%zu},", 841 vnode->fid.vid, vnode->fid.vnode, count); 842 843 if (IS_SWAPFILE(&vnode->vfs_inode)) { 844 printk(KERN_INFO 845 "AFS: Attempt to write to active swap file!\n"); 846 return -EBUSY; 847 } 848 849 if (!count) 850 return 0; 851 852 result = afs_validate(vnode, af->key); 853 if (result < 0) 854 return result; 855 856 result = generic_file_write_iter(iocb, from); 857 858 _leave(" = %zd", result); 859 return result; 860 } 861 862 /* 863 * flush any dirty pages for this process, and check for write errors. 864 * - the return status from this call provides a reliable indication of 865 * whether any write errors occurred for this process. 866 */ 867 int afs_fsync(struct file *file, loff_t start, loff_t end, int datasync) 868 { 869 struct afs_vnode *vnode = AFS_FS_I(file_inode(file)); 870 struct afs_file *af = file->private_data; 871 int ret; 872 873 _enter("{%llx:%llu},{n=%pD},%d", 874 vnode->fid.vid, vnode->fid.vnode, file, 875 datasync); 876 877 ret = afs_validate(vnode, af->key); 878 if (ret < 0) 879 return ret; 880 881 return file_write_and_wait_range(file, start, end); 882 } 883 884 /* 885 * notification that a previously read-only page is about to become writable 886 * - if it returns an error, the caller will deliver a bus error signal 887 */ 888 vm_fault_t afs_page_mkwrite(struct vm_fault *vmf) 889 { 890 struct folio *folio = page_folio(vmf->page); 891 struct file *file = vmf->vma->vm_file; 892 struct inode *inode = file_inode(file); 893 struct afs_vnode *vnode = AFS_FS_I(inode); 894 struct afs_file *af = file->private_data; 895 unsigned long priv; 896 vm_fault_t ret = VM_FAULT_RETRY; 897 898 _enter("{{%llx:%llu}},{%lx}", vnode->fid.vid, vnode->fid.vnode, folio_index(folio)); 899 900 afs_validate(vnode, af->key); 901 902 sb_start_pagefault(inode->i_sb); 903 904 /* Wait for the page to be written to the cache before we allow it to 905 * be modified. We then assume the entire page will need writing back. 906 */ 907 #ifdef CONFIG_AFS_FSCACHE 908 if (folio_test_fscache(folio) && 909 folio_wait_fscache_killable(folio) < 0) 910 goto out; 911 #endif 912 913 if (folio_wait_writeback_killable(folio)) 914 goto out; 915 916 if (folio_lock_killable(folio) < 0) 917 goto out; 918 919 /* We mustn't change folio->private until writeback is complete as that 920 * details the portion of the page we need to write back and we might 921 * need to redirty the page if there's a problem. 922 */ 923 if (folio_wait_writeback_killable(folio) < 0) { 924 folio_unlock(folio); 925 goto out; 926 } 927 928 priv = afs_folio_dirty(folio, 0, folio_size(folio)); 929 priv = afs_folio_dirty_mmapped(priv); 930 if (folio_test_private(folio)) { 931 folio_change_private(folio, (void *)priv); 932 trace_afs_folio_dirty(vnode, tracepoint_string("mkwrite+"), folio); 933 } else { 934 folio_attach_private(folio, (void *)priv); 935 trace_afs_folio_dirty(vnode, tracepoint_string("mkwrite"), folio); 936 } 937 file_update_time(file); 938 939 ret = VM_FAULT_LOCKED; 940 out: 941 sb_end_pagefault(inode->i_sb); 942 return ret; 943 } 944 945 /* 946 * Prune the keys cached for writeback. The caller must hold vnode->wb_lock. 947 */ 948 void afs_prune_wb_keys(struct afs_vnode *vnode) 949 { 950 LIST_HEAD(graveyard); 951 struct afs_wb_key *wbk, *tmp; 952 953 /* Discard unused keys */ 954 spin_lock(&vnode->wb_lock); 955 956 if (!mapping_tagged(&vnode->vfs_inode.i_data, PAGECACHE_TAG_WRITEBACK) && 957 !mapping_tagged(&vnode->vfs_inode.i_data, PAGECACHE_TAG_DIRTY)) { 958 list_for_each_entry_safe(wbk, tmp, &vnode->wb_keys, vnode_link) { 959 if (refcount_read(&wbk->usage) == 1) 960 list_move(&wbk->vnode_link, &graveyard); 961 } 962 } 963 964 spin_unlock(&vnode->wb_lock); 965 966 while (!list_empty(&graveyard)) { 967 wbk = list_entry(graveyard.next, struct afs_wb_key, vnode_link); 968 list_del(&wbk->vnode_link); 969 afs_put_wb_key(wbk); 970 } 971 } 972 973 /* 974 * Clean up a page during invalidation. 975 */ 976 int afs_launder_folio(struct folio *folio) 977 { 978 struct afs_vnode *vnode = AFS_FS_I(folio_inode(folio)); 979 struct iov_iter iter; 980 struct bio_vec bv[1]; 981 unsigned long priv; 982 unsigned int f, t; 983 int ret = 0; 984 985 _enter("{%lx}", folio->index); 986 987 priv = (unsigned long)folio_get_private(folio); 988 if (folio_clear_dirty_for_io(folio)) { 989 f = 0; 990 t = folio_size(folio); 991 if (folio_test_private(folio)) { 992 f = afs_folio_dirty_from(folio, priv); 993 t = afs_folio_dirty_to(folio, priv); 994 } 995 996 bv[0].bv_page = &folio->page; 997 bv[0].bv_offset = f; 998 bv[0].bv_len = t - f; 999 iov_iter_bvec(&iter, WRITE, bv, 1, bv[0].bv_len); 1000 1001 trace_afs_folio_dirty(vnode, tracepoint_string("launder"), folio); 1002 ret = afs_store_data(vnode, &iter, folio_pos(folio) + f, true); 1003 } 1004 1005 trace_afs_folio_dirty(vnode, tracepoint_string("laundered"), folio); 1006 folio_detach_private(folio); 1007 folio_wait_fscache(folio); 1008 return ret; 1009 } 1010 1011 /* 1012 * Deal with the completion of writing the data to the cache. 1013 */ 1014 static void afs_write_to_cache_done(void *priv, ssize_t transferred_or_error, 1015 bool was_async) 1016 { 1017 struct afs_vnode *vnode = priv; 1018 1019 if (IS_ERR_VALUE(transferred_or_error) && 1020 transferred_or_error != -ENOBUFS) 1021 afs_invalidate_cache(vnode, 0); 1022 } 1023 1024 /* 1025 * Save the write to the cache also. 1026 */ 1027 static void afs_write_to_cache(struct afs_vnode *vnode, 1028 loff_t start, size_t len, loff_t i_size, 1029 bool caching) 1030 { 1031 fscache_write_to_cache(afs_vnode_cache(vnode), 1032 vnode->vfs_inode.i_mapping, start, len, i_size, 1033 afs_write_to_cache_done, vnode, caching); 1034 } 1035