hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/nilfs2/mdt.c
....@@ -199,7 +199,7 @@
199199 out_no_wait:
200200 err = -EIO;
201201 if (!buffer_uptodate(first_bh)) {
202
- nilfs_msg(inode->i_sb, KERN_ERR,
202
+ nilfs_err(inode->i_sb,
203203 "I/O error reading meta-data file (ino=%lu, block-offset=%lu)",
204204 inode->i_ino, block);
205205 goto failed_bh;
....@@ -469,9 +469,18 @@
469469 void nilfs_mdt_clear(struct inode *inode)
470470 {
471471 struct nilfs_mdt_info *mdi = NILFS_MDT(inode);
472
+ struct nilfs_shadow_map *shadow = mdi->mi_shadow;
472473
473474 if (mdi->mi_palloc_cache)
474475 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
+ }
475484 }
476485
477486 /**
....@@ -505,12 +514,15 @@
505514 struct nilfs_shadow_map *shadow)
506515 {
507516 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
517
+ struct inode *s_inode;
508518
509519 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;
514526 mi->mi_shadow = shadow;
515527 return 0;
516528 }
....@@ -524,14 +536,15 @@
524536 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
525537 struct nilfs_inode_info *ii = NILFS_I(inode);
526538 struct nilfs_shadow_map *shadow = mi->mi_shadow;
539
+ struct inode *s_inode = shadow->inode;
527540 int ret;
528541
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);
530543 if (ret)
531544 goto out;
532545
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);
535548 if (ret)
536549 goto out;
537550
....@@ -547,7 +560,7 @@
547560 struct page *page;
548561 int blkbits = inode->i_blkbits;
549562
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);
551564 if (!page)
552565 return -ENOMEM;
553566
....@@ -579,7 +592,7 @@
579592 struct page *page;
580593 int n;
581594
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);
583596 if (page) {
584597 if (page_has_buffers(page)) {
585598 n = bh_offset(bh) >> inode->i_blkbits;
....@@ -620,10 +633,11 @@
620633 nilfs_palloc_clear_cache(inode);
621634
622635 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);
624637
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);
627641
628642 nilfs_bmap_restore(ii->i_bmap, &shadow->bmap_store);
629643
....@@ -638,10 +652,11 @@
638652 {
639653 struct nilfs_mdt_info *mi = NILFS_MDT(inode);
640654 struct nilfs_shadow_map *shadow = mi->mi_shadow;
655
+ struct inode *shadow_btnc_inode = NILFS_I(shadow->inode)->i_assoc_inode;
641656
642657 down_write(&mi->mi_sem);
643658 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);
646661 up_write(&mi->mi_sem);
647662 }