Merge tag 'f2fs-for-6.0' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk...
[sfrench/cifs-2.6.git] / fs / f2fs / node.c
index 740c72d088f395005d5b480c4af05a8f6634d64a..e06a0c478b39a287c7a7b303a466d59f0fb87bfd 100644 (file)
@@ -1292,7 +1292,11 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
                dec_valid_node_count(sbi, dn->inode, !ofs);
                goto fail;
        }
-       f2fs_bug_on(sbi, new_ni.blk_addr != NULL_ADDR);
+       if (unlikely(new_ni.blk_addr != NULL_ADDR)) {
+               err = -EFSCORRUPTED;
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
+               goto fail;
+       }
 #endif
        new_ni.nid = dn->nid;
        new_ni.ino = dn->inode->i_ino;
@@ -1945,7 +1949,6 @@ next_step:
                for (i = 0; i < nr_pages; i++) {
                        struct page *page = pvec.pages[i];
                        bool submitted = false;
-                       bool may_dirty = true;
 
                        /* give a priority to WB_SYNC threads */
                        if (atomic_read(&sbi->wb_sync_req[NODE]) &&
@@ -1998,11 +2001,8 @@ continue_unlock:
                        }
 
                        /* flush dirty inode */
-                       if (IS_INODE(page) && may_dirty) {
-                               may_dirty = false;
-                               if (flush_dirty_inode(page))
-                                       goto lock_node;
-                       }
+                       if (IS_INODE(page) && flush_dirty_inode(page))
+                               goto lock_node;
 write_node:
                        f2fs_wait_on_page_writeback(page, NODE, true, true);