ext4: remove unnecessary wbc parameter from ext4_bio_write_page
[linux-2.6-microblaze.git] / fs / ext4 / inode.c
index 0d8385a..2794688 100644 (file)
@@ -175,6 +175,7 @@ void ext4_evict_inode(struct inode *inode)
         */
        int extra_credits = 6;
        struct ext4_xattr_inode_array *ea_inode_array = NULL;
+       bool freeze_protected = false;
 
        trace_ext4_evict_inode(inode);
 
@@ -232,9 +233,14 @@ void ext4_evict_inode(struct inode *inode)
 
        /*
         * Protect us against freezing - iput() caller didn't have to have any
-        * protection against it
+        * protection against it. When we are in a running transaction though,
+        * we are already protected against freezing and we cannot grab further
+        * protection due to lock ordering constraints.
         */
-       sb_start_intwrite(inode->i_sb);
+       if (!ext4_journal_current_handle()) {
+               sb_start_intwrite(inode->i_sb);
+               freeze_protected = true;
+       }
 
        if (!IS_NOQUOTA(inode))
                extra_credits += EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb);
@@ -253,7 +259,8 @@ void ext4_evict_inode(struct inode *inode)
                 * cleaned up.
                 */
                ext4_orphan_del(NULL, inode);
-               sb_end_intwrite(inode->i_sb);
+               if (freeze_protected)
+                       sb_end_intwrite(inode->i_sb);
                goto no_delete;
        }
 
@@ -294,7 +301,8 @@ void ext4_evict_inode(struct inode *inode)
 stop_handle:
                ext4_journal_stop(handle);
                ext4_orphan_del(NULL, inode);
-               sb_end_intwrite(inode->i_sb);
+               if (freeze_protected)
+                       sb_end_intwrite(inode->i_sb);
                ext4_xattr_inode_array_free(ea_inode_array);
                goto no_delete;
        }
@@ -323,7 +331,8 @@ stop_handle:
        else
                ext4_free_inode(handle, inode);
        ext4_journal_stop(handle);
-       sb_end_intwrite(inode->i_sb);
+       if (freeze_protected)
+               sb_end_intwrite(inode->i_sb);
        ext4_xattr_inode_array_free(ea_inode_array);
        return;
 no_delete:
@@ -830,8 +839,8 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
        int create = map_flags & EXT4_GET_BLOCKS_CREATE;
        int err;
 
-       J_ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
-                || handle != NULL || create == 0);
+       ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
+                   || handle != NULL || create == 0);
 
        map.m_lblk = block;
        map.m_len = 1;
@@ -846,9 +855,9 @@ struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
        if (unlikely(!bh))
                return ERR_PTR(-ENOMEM);
        if (map.m_flags & EXT4_MAP_NEW) {
-               J_ASSERT(create != 0);
-               J_ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
-                        || (handle != NULL));
+               ASSERT(create != 0);
+               ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
+                           || (handle != NULL));
 
                /*
                 * Now that we do not always journal data, we should
@@ -2055,7 +2064,7 @@ static int ext4_writepage(struct page *page,
                unlock_page(page);
                return -ENOMEM;
        }
-       ret = ext4_bio_write_page(&io_submit, page, len, wbc, keep_towrite);
+       ret = ext4_bio_write_page(&io_submit, page, len, keep_towrite);
        ext4_io_submit(&io_submit);
        /* Drop io_end reference we got from init */
        ext4_put_io_end_defer(io_submit.io_end);
@@ -2089,7 +2098,7 @@ static int mpage_submit_page(struct mpage_da_data *mpd, struct page *page)
                len = size & ~PAGE_MASK;
        else
                len = PAGE_SIZE;
-       err = ext4_bio_write_page(&mpd->io_submit, page, len, mpd->wbc, false);
+       err = ext4_bio_write_page(&mpd->io_submit, page, len, false);
        if (!err)
                mpd->wbc->nr_to_write--;
        mpd->first_page++;
@@ -4610,7 +4619,7 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
            (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))) {
                if (flags & EXT4_IGET_HANDLE)
                        return ERR_PTR(-ESTALE);
-               __ext4_error(sb, function, line, EFSCORRUPTED, 0,
+               __ext4_error(sb, function, line, false, EFSCORRUPTED, 0,
                             "inode #%lu: comm %s: iget: illegal inode #",
                             ino, current->comm);
                return ERR_PTR(-EFSCORRUPTED);