goto release_pages;
                        }
 
-                       set_nid(&parent->page, offset[i - 1], nids[i], i == 1);
+                       set_nid(parent, offset[i - 1], nids[i], i == 1);
                        f2fs_alloc_nid_done(sbi, nids[i]);
                        done = true;
                } else if (mode == LOOKUP_NODE_RA && i == level && level > 1) {
                        ret = truncate_dnode(&rdn);
                        if (ret < 0)
                                goto out_err;
-                       if (set_nid(&folio->page, i, 0, false))
+                       if (set_nid(folio, i, 0, false))
                                dn->node_changed = true;
                }
        } else {
                        rdn.nid = child_nid;
                        ret = truncate_nodes(&rdn, child_nofs, 0, depth - 1);
                        if (ret == (NIDS_PER_BLOCK + 1)) {
-                               if (set_nid(&folio->page, i, 0, false))
+                               if (set_nid(folio, i, 0, false))
                                        dn->node_changed = true;
                                child_nofs += ret;
                        } else if (ret < 0 && ret != -ENOENT) {
                err = truncate_dnode(dn);
                if (err < 0)
                        goto fail;
-               if (set_nid(&folios[idx]->page, i, 0, false))
+               if (set_nid(folios[idx], i, 0, false))
                        dn->node_changed = true;
        }
 
                if (offset[1] == 0 && get_nid(&folio->page, offset[0], true)) {
                        folio_lock(folio);
                        BUG_ON(folio->mapping != NODE_MAPPING(sbi));
-                       set_nid(&folio->page, offset[0], 0, true);
+                       set_nid(folio, offset[0], 0, true);
                        folio_unlock(folio);
                }
                offset[1] = 0;
 
        return true;
 }
 
-static inline int set_nid(struct page *p, int off, nid_t nid, bool i)
+static inline int set_nid(struct folio *folio, int off, nid_t nid, bool i)
 {
-       struct f2fs_node *rn = F2FS_NODE(p);
+       struct f2fs_node *rn = F2FS_NODE(&folio->page);
 
-       f2fs_wait_on_page_writeback(p, NODE, true, true);
+       f2fs_folio_wait_writeback(folio, NODE, true, true);
 
        if (i)
                rn->i.i_nid[off - NODE_DIR1_BLOCK] = cpu_to_le32(nid);
        else
                rn->in.nid[off] = cpu_to_le32(nid);
-       return set_page_dirty(p);
+       return folio_mark_dirty(folio);
 }
 
 static inline nid_t get_nid(struct page *p, int off, bool i)