.. | .. |
---|
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 | } |
---|