| .. | .. |
|---|
| 199 | 199 | out_no_wait: |
|---|
| 200 | 200 | err = -EIO; |
|---|
| 201 | 201 | if (!buffer_uptodate(first_bh)) { |
|---|
| 202 | | - nilfs_msg(inode->i_sb, KERN_ERR, |
|---|
| 202 | + nilfs_err(inode->i_sb, |
|---|
| 203 | 203 | "I/O error reading meta-data file (ino=%lu, block-offset=%lu)", |
|---|
| 204 | 204 | inode->i_ino, block); |
|---|
| 205 | 205 | goto failed_bh; |
|---|
| .. | .. |
|---|
| 469 | 469 | void nilfs_mdt_clear(struct inode *inode) |
|---|
| 470 | 470 | { |
|---|
| 471 | 471 | struct nilfs_mdt_info *mdi = NILFS_MDT(inode); |
|---|
| 472 | + struct nilfs_shadow_map *shadow = mdi->mi_shadow; |
|---|
| 472 | 473 | |
|---|
| 473 | 474 | if (mdi->mi_palloc_cache) |
|---|
| 474 | 475 | nilfs_palloc_destroy_cache(inode); |
|---|
| 476 | + |
|---|
| 477 | + if (shadow) { |
|---|
| 478 | + struct inode *s_inode = shadow->inode; |
|---|
| 479 | + |
|---|
| 480 | + shadow->inode = NULL; |
|---|
| 481 | + iput(s_inode); |
|---|
| 482 | + mdi->mi_shadow = NULL; |
|---|
| 483 | + } |
|---|
| 475 | 484 | } |
|---|
| 476 | 485 | |
|---|
| 477 | 486 | /** |
|---|
| .. | .. |
|---|
| 505 | 514 | struct nilfs_shadow_map *shadow) |
|---|
| 506 | 515 | { |
|---|
| 507 | 516 | struct nilfs_mdt_info *mi = NILFS_MDT(inode); |
|---|
| 517 | + struct inode *s_inode; |
|---|
| 508 | 518 | |
|---|
| 509 | 519 | INIT_LIST_HEAD(&shadow->frozen_buffers); |
|---|
| 510 | | - address_space_init_once(&shadow->frozen_data); |
|---|
| 511 | | - nilfs_mapping_init(&shadow->frozen_data, inode); |
|---|
| 512 | | - address_space_init_once(&shadow->frozen_btnodes); |
|---|
| 513 | | - nilfs_mapping_init(&shadow->frozen_btnodes, inode); |
|---|
| 520 | + |
|---|
| 521 | + s_inode = nilfs_iget_for_shadow(inode); |
|---|
| 522 | + if (IS_ERR(s_inode)) |
|---|
| 523 | + return PTR_ERR(s_inode); |
|---|
| 524 | + |
|---|
| 525 | + shadow->inode = s_inode; |
|---|
| 514 | 526 | mi->mi_shadow = shadow; |
|---|
| 515 | 527 | return 0; |
|---|
| 516 | 528 | } |
|---|
| .. | .. |
|---|
| 524 | 536 | struct nilfs_mdt_info *mi = NILFS_MDT(inode); |
|---|
| 525 | 537 | struct nilfs_inode_info *ii = NILFS_I(inode); |
|---|
| 526 | 538 | struct nilfs_shadow_map *shadow = mi->mi_shadow; |
|---|
| 539 | + struct inode *s_inode = shadow->inode; |
|---|
| 527 | 540 | int ret; |
|---|
| 528 | 541 | |
|---|
| 529 | | - ret = nilfs_copy_dirty_pages(&shadow->frozen_data, inode->i_mapping); |
|---|
| 542 | + ret = nilfs_copy_dirty_pages(s_inode->i_mapping, inode->i_mapping); |
|---|
| 530 | 543 | if (ret) |
|---|
| 531 | 544 | goto out; |
|---|
| 532 | 545 | |
|---|
| 533 | | - ret = nilfs_copy_dirty_pages(&shadow->frozen_btnodes, |
|---|
| 534 | | - &ii->i_btnode_cache); |
|---|
| 546 | + ret = nilfs_copy_dirty_pages(NILFS_I(s_inode)->i_assoc_inode->i_mapping, |
|---|
| 547 | + ii->i_assoc_inode->i_mapping); |
|---|
| 535 | 548 | if (ret) |
|---|
| 536 | 549 | goto out; |
|---|
| 537 | 550 | |
|---|
| .. | .. |
|---|
| 547 | 560 | struct page *page; |
|---|
| 548 | 561 | int blkbits = inode->i_blkbits; |
|---|
| 549 | 562 | |
|---|
| 550 | | - page = grab_cache_page(&shadow->frozen_data, bh->b_page->index); |
|---|
| 563 | + page = grab_cache_page(shadow->inode->i_mapping, bh->b_page->index); |
|---|
| 551 | 564 | if (!page) |
|---|
| 552 | 565 | return -ENOMEM; |
|---|
| 553 | 566 | |
|---|
| .. | .. |
|---|
| 579 | 592 | struct page *page; |
|---|
| 580 | 593 | int n; |
|---|
| 581 | 594 | |
|---|
| 582 | | - page = find_lock_page(&shadow->frozen_data, bh->b_page->index); |
|---|
| 595 | + page = find_lock_page(shadow->inode->i_mapping, bh->b_page->index); |
|---|
| 583 | 596 | if (page) { |
|---|
| 584 | 597 | if (page_has_buffers(page)) { |
|---|
| 585 | 598 | n = bh_offset(bh) >> inode->i_blkbits; |
|---|
| .. | .. |
|---|
| 620 | 633 | nilfs_palloc_clear_cache(inode); |
|---|
| 621 | 634 | |
|---|
| 622 | 635 | nilfs_clear_dirty_pages(inode->i_mapping, true); |
|---|
| 623 | | - nilfs_copy_back_pages(inode->i_mapping, &shadow->frozen_data); |
|---|
| 636 | + nilfs_copy_back_pages(inode->i_mapping, shadow->inode->i_mapping); |
|---|
| 624 | 637 | |
|---|
| 625 | | - nilfs_clear_dirty_pages(&ii->i_btnode_cache, true); |
|---|
| 626 | | - nilfs_copy_back_pages(&ii->i_btnode_cache, &shadow->frozen_btnodes); |
|---|
| 638 | + nilfs_clear_dirty_pages(ii->i_assoc_inode->i_mapping, true); |
|---|
| 639 | + nilfs_copy_back_pages(ii->i_assoc_inode->i_mapping, |
|---|
| 640 | + NILFS_I(shadow->inode)->i_assoc_inode->i_mapping); |
|---|
| 627 | 641 | |
|---|
| 628 | 642 | nilfs_bmap_restore(ii->i_bmap, &shadow->bmap_store); |
|---|
| 629 | 643 | |
|---|
| .. | .. |
|---|
| 638 | 652 | { |
|---|
| 639 | 653 | struct nilfs_mdt_info *mi = NILFS_MDT(inode); |
|---|
| 640 | 654 | struct nilfs_shadow_map *shadow = mi->mi_shadow; |
|---|
| 655 | + struct inode *shadow_btnc_inode = NILFS_I(shadow->inode)->i_assoc_inode; |
|---|
| 641 | 656 | |
|---|
| 642 | 657 | down_write(&mi->mi_sem); |
|---|
| 643 | 658 | nilfs_release_frozen_buffers(shadow); |
|---|
| 644 | | - truncate_inode_pages(&shadow->frozen_data, 0); |
|---|
| 645 | | - truncate_inode_pages(&shadow->frozen_btnodes, 0); |
|---|
| 659 | + truncate_inode_pages(shadow->inode->i_mapping, 0); |
|---|
| 660 | + truncate_inode_pages(shadow_btnc_inode->i_mapping, 0); |
|---|
| 646 | 661 | up_write(&mi->mi_sem); |
|---|
| 647 | 662 | } |
|---|