recovery.c (355a47ae7ebcf9d605aa809b259d380422e81b8d) | recovery.c (dcbb4c10e6d9693cc9d6fa493b4d130b66a60c7d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/recovery.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 174 unchanged lines hidden (view full) --- 183 184out_put: 185 f2fs_put_page(page, 0); 186out: 187 if (file_enc_name(inode)) 188 name = "<encrypted>"; 189 else 190 name = raw_inode->i_name; | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/recovery.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 174 unchanged lines hidden (view full) --- 183 184out_put: 185 f2fs_put_page(page, 0); 186out: 187 if (file_enc_name(inode)) 188 name = "<encrypted>"; 189 else 190 name = raw_inode->i_name; |
191 f2fs_msg(inode->i_sb, KERN_NOTICE, 192 "%s: ino = %x, name = %s, dir = %lx, err = %d", 193 __func__, ino_of_node(ipage), name, 194 IS_ERR(dir) ? 0 : dir->i_ino, err); | 191 f2fs_notice(F2FS_I_SB(inode), "%s: ino = %x, name = %s, dir = %lx, err = %d", 192 __func__, ino_of_node(ipage), name, 193 IS_ERR(dir) ? 0 : dir->i_ino, err); |
195 return err; 196} 197 198static int recover_quota_data(struct inode *inode, struct page *page) 199{ 200 struct f2fs_inode *raw = F2FS_INODE(page); 201 struct iattr attr; 202 uid_t i_uid = le32_to_cpu(raw->i_uid); --- 84 unchanged lines hidden (view full) --- 287 288 f2fs_mark_inode_dirty_sync(inode, true); 289 290 if (file_enc_name(inode)) 291 name = "<encrypted>"; 292 else 293 name = F2FS_INODE(page)->i_name; 294 | 194 return err; 195} 196 197static int recover_quota_data(struct inode *inode, struct page *page) 198{ 199 struct f2fs_inode *raw = F2FS_INODE(page); 200 struct iattr attr; 201 uid_t i_uid = le32_to_cpu(raw->i_uid); --- 84 unchanged lines hidden (view full) --- 286 287 f2fs_mark_inode_dirty_sync(inode, true); 288 289 if (file_enc_name(inode)) 290 name = "<encrypted>"; 291 else 292 name = F2FS_INODE(page)->i_name; 293 |
295 f2fs_msg(inode->i_sb, KERN_NOTICE, 296 "recover_inode: ino = %x, name = %s, inline = %x", 297 ino_of_node(page), name, raw->i_inline); | 294 f2fs_notice(F2FS_I_SB(inode), "recover_inode: ino = %x, name = %s, inline = %x", 295 ino_of_node(page), name, raw->i_inline); |
298 return 0; 299} 300 301static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head, 302 bool check_only) 303{ 304 struct curseg_info *curseg; 305 struct page *page = NULL; --- 60 unchanged lines hidden (view full) --- 366 entry->blkaddr = blkaddr; 367 368 if (IS_INODE(page) && is_dent_dnode(page)) 369 entry->last_dentry = blkaddr; 370next: 371 /* sanity check in order to detect looped node chain */ 372 if (++loop_cnt >= free_blocks || 373 blkaddr == next_blkaddr_of_node(page)) { | 296 return 0; 297} 298 299static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head, 300 bool check_only) 301{ 302 struct curseg_info *curseg; 303 struct page *page = NULL; --- 60 unchanged lines hidden (view full) --- 364 entry->blkaddr = blkaddr; 365 366 if (IS_INODE(page) && is_dent_dnode(page)) 367 entry->last_dentry = blkaddr; 368next: 369 /* sanity check in order to detect looped node chain */ 370 if (++loop_cnt >= free_blocks || 371 blkaddr == next_blkaddr_of_node(page)) { |
374 f2fs_msg(sbi->sb, KERN_NOTICE, 375 "%s: detect looped node chain, " 376 "blkaddr:%u, next:%u", 377 __func__, blkaddr, next_blkaddr_of_node(page)); | 372 f2fs_notice(sbi, "%s: detect looped node chain, blkaddr:%u, next:%u", 373 __func__, blkaddr, 374 next_blkaddr_of_node(page)); |
378 f2fs_put_page(page, 1); 379 err = -EINVAL; 380 break; 381 } 382 383 /* check next segment */ 384 blkaddr = next_blkaddr_of_node(page); 385 f2fs_put_page(page, 1); --- 162 unchanged lines hidden (view full) --- 548 549 err = f2fs_get_node_info(sbi, dn.nid, &ni); 550 if (err) 551 goto err; 552 553 f2fs_bug_on(sbi, ni.ino != ino_of_node(page)); 554 555 if (ofs_of_node(dn.node_page) != ofs_of_node(page)) { | 375 f2fs_put_page(page, 1); 376 err = -EINVAL; 377 break; 378 } 379 380 /* check next segment */ 381 blkaddr = next_blkaddr_of_node(page); 382 f2fs_put_page(page, 1); --- 162 unchanged lines hidden (view full) --- 545 546 err = f2fs_get_node_info(sbi, dn.nid, &ni); 547 if (err) 548 goto err; 549 550 f2fs_bug_on(sbi, ni.ino != ino_of_node(page)); 551 552 if (ofs_of_node(dn.node_page) != ofs_of_node(page)) { |
556 f2fs_msg(sbi->sb, KERN_WARNING, 557 "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u", 558 inode->i_ino, ofs_of_node(dn.node_page), 559 ofs_of_node(page)); | 553 f2fs_warn(sbi, "Inconsistent ofs_of_node, ino:%lu, ofs:%u, %u", 554 inode->i_ino, ofs_of_node(dn.node_page), 555 ofs_of_node(page)); |
560 err = -EFAULT; 561 goto err; 562 } 563 564 for (; start < end; start++, dn.ofs_in_node++) { 565 block_t src, dest; 566 567 src = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node); --- 69 unchanged lines hidden (view full) --- 637 638 copy_node_footer(dn.node_page, page); 639 fill_node_footer(dn.node_page, dn.nid, ni.ino, 640 ofs_of_node(page), false); 641 set_page_dirty(dn.node_page); 642err: 643 f2fs_put_dnode(&dn); 644out: | 556 err = -EFAULT; 557 goto err; 558 } 559 560 for (; start < end; start++, dn.ofs_in_node++) { 561 block_t src, dest; 562 563 src = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node); --- 69 unchanged lines hidden (view full) --- 633 634 copy_node_footer(dn.node_page, page); 635 fill_node_footer(dn.node_page, dn.nid, ni.ino, 636 ofs_of_node(page), false); 637 set_page_dirty(dn.node_page); 638err: 639 f2fs_put_dnode(&dn); 640out: |
645 f2fs_msg(sbi->sb, KERN_NOTICE, 646 "recover_data: ino = %lx (i_size: %s) recovered = %d, err = %d", 647 inode->i_ino, 648 file_keep_isize(inode) ? "keep" : "recover", 649 recovered, err); | 641 f2fs_notice(sbi, "recover_data: ino = %lx (i_size: %s) recovered = %d, err = %d", 642 inode->i_ino, file_keep_isize(inode) ? "keep" : "recover", 643 recovered, err); |
650 return err; 651} 652 653static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list, 654 struct list_head *tmp_inode_list, struct list_head *dir_list) 655{ 656 struct curseg_info *curseg; 657 struct page *page = NULL; --- 71 unchanged lines hidden (view full) --- 729 int ret = 0; 730 unsigned long s_flags = sbi->sb->s_flags; 731 bool need_writecp = false; 732#ifdef CONFIG_QUOTA 733 int quota_enabled; 734#endif 735 736 if (s_flags & SB_RDONLY) { | 644 return err; 645} 646 647static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list, 648 struct list_head *tmp_inode_list, struct list_head *dir_list) 649{ 650 struct curseg_info *curseg; 651 struct page *page = NULL; --- 71 unchanged lines hidden (view full) --- 723 int ret = 0; 724 unsigned long s_flags = sbi->sb->s_flags; 725 bool need_writecp = false; 726#ifdef CONFIG_QUOTA 727 int quota_enabled; 728#endif 729 730 if (s_flags & SB_RDONLY) { |
737 f2fs_msg(sbi->sb, KERN_INFO, 738 "recover fsync data on readonly fs"); | 731 f2fs_info(sbi, "recover fsync data on readonly fs"); |
739 sbi->sb->s_flags &= ~SB_RDONLY; 740 } 741 742#ifdef CONFIG_QUOTA 743 /* Needed for iput() to work correctly and not trash data */ 744 sbi->sb->s_flags |= SB_ACTIVE; 745 /* Turn on quotas so that they are updated correctly */ 746 quota_enabled = f2fs_enable_quota_files(sbi, s_flags & SB_RDONLY); --- 77 unchanged lines hidden --- | 732 sbi->sb->s_flags &= ~SB_RDONLY; 733 } 734 735#ifdef CONFIG_QUOTA 736 /* Needed for iput() to work correctly and not trash data */ 737 sbi->sb->s_flags |= SB_ACTIVE; 738 /* Turn on quotas so that they are updated correctly */ 739 quota_enabled = f2fs_enable_quota_files(sbi, s_flags & SB_RDONLY); --- 77 unchanged lines hidden --- |