f2fs: introduce a new global lock scheme
[deliverable/linux.git] / fs / f2fs / recovery.c
index 61bdaa7559067f5cbec549e84537604efba87ad2..f16d12df8e990375f17e1a9975c573dc429f297c 100644 (file)
@@ -242,6 +242,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
        struct f2fs_summary sum;
        struct node_info ni;
        int err = 0;
+       int ilock;
 
        start = start_bidx_of_node(ofs_of_node(page));
        if (IS_INODE(page))
@@ -249,10 +250,14 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
        else
                end = start + ADDRS_PER_BLOCK;
 
+       ilock = mutex_lock_op(sbi);
        set_new_dnode(&dn, inode, NULL, NULL, 0);
+
        err = get_dnode_of_data(&dn, start, ALLOC_NODE);
-       if (err)
+       if (err) {
+               mutex_unlock_op(sbi, ilock);
                return err;
+       }
 
        wait_on_page_writeback(dn.node_page);
 
@@ -297,6 +302,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
 
        recover_node_page(sbi, dn.node_page, &sum, &ni, blkaddr);
        f2fs_put_dnode(&dn);
+       mutex_unlock_op(sbi, ilock);
        return 0;
 }
 
This page took 0.035514 seconds and 5 git commands to generate.