goto out_mutex;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_TRUNCATE_LOG_UPDATE);
+       handle = ocfs2_start_trans(osb, OCFS2_TRUNCATE_LOG_UPDATE);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                mlog_errno(status);
                        }
                }
 
-               handle = ocfs2_start_trans(osb, NULL,
-                                          OCFS2_TRUNCATE_LOG_UPDATE);
+               handle = ocfs2_start_trans(osb, OCFS2_TRUNCATE_LOG_UPDATE);
                if (IS_ERR(handle)) {
                        status = PTR_ERR(handle);
                        mlog_errno(status);
 
        credits = ocfs2_calc_tree_trunc_credits(osb->sb, clusters_to_del,
                                                fe, el);
-       handle = ocfs2_start_trans(osb, NULL, credits);
+       handle = ocfs2_start_trans(osb, credits);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
 
        struct ocfs2_journal_handle *handle = NULL;
        int ret = 0;
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (!handle) {
                ret = -ENOMEM;
                mlog_errno(ret);
 
                credits = OCFS2_SIMPLE_DIR_EXTEND_CREDITS;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, credits);
+       handle = ocfs2_start_trans(osb, credits);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
 
        struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
        struct ocfs2_journal_handle *handle = NULL;
 
-       handle = ocfs2_start_trans(osb, NULL,
-                                  OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (handle == NULL) {
                ret = -ENOMEM;
                mlog_errno(ret);
        /* TODO: This needs to actually orphan the inode in this
         * transaction. */
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                mlog_errno(status);
        drop_alloc_sem = 1;
 
        credits = ocfs2_calc_extend_credits(osb->sb, fe, clusters_to_add);
-       handle = ocfs2_start_trans(osb, NULL, credits);
+       handle = ocfs2_start_trans(osb, credits);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                }
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                mlog_errno(status);
        mlog_entry("(Inode %llu, mode 0%o)\n",
                   (unsigned long long)oi->ip_blkno, inode->i_mode);
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (handle == NULL) {
                ret = -ENOMEM;
                mlog_errno(ret);
 
        if (!fe->i_clusters)
                goto bail;
 
-       handle = ocfs2_start_trans(osb, handle, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                goto bail;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_DELETE_INODE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_DELETE_INODE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                mlog_errno(status);
 
        if (!S_ISDIR(inode->i_mode))
                flags &= ~OCFS2_DIRSYNC_FL;
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_INODE_UPDATE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                mlog_errno(status);
 
  * you pass it a handle however, it may still return error, in which
  * case it has free'd the passed handle for you. */
 struct ocfs2_journal_handle *ocfs2_start_trans(struct ocfs2_super *osb,
-                                              struct ocfs2_journal_handle *handle,
                                               int max_buffs)
 {
        int ret;
        journal_t *journal = osb->journal->j_journal;
-
-       mlog_entry("(max_buffs = %d)\n", max_buffs);
+       struct ocfs2_journal_handle *handle;
 
        BUG_ON(!osb || !osb->journal->j_journal);
 
-       if (ocfs2_is_hard_readonly(osb)) {
-               ret = -EROFS;
-               goto done_free;
-       }
+       if (ocfs2_is_hard_readonly(osb))
+               return ERR_PTR(-EROFS);
 
        BUG_ON(osb->journal->j_state == OCFS2_JOURNAL_FREE);
        BUG_ON(max_buffs <= 0);
                BUG();
        }
 
-       if (!handle)
-               handle = ocfs2_alloc_handle(osb);
+       handle = ocfs2_alloc_handle(osb);
        if (!handle) {
                ret = -ENOMEM;
-               mlog(ML_ERROR, "Failed to allocate memory for journal "
-                    "handle!\n");
-               goto done_free;
+               mlog_errno(ret);
+               return ERR_PTR(ret);
        }
 
        down_read(&osb->journal->j_trans_barrier);
        handle->k_handle = journal_start(journal, max_buffs);
        if (IS_ERR(handle->k_handle)) {
                up_read(&osb->journal->j_trans_barrier);
+               kfree(handle);
 
                ret = PTR_ERR(handle->k_handle);
                handle->k_handle = NULL;
                        ocfs2_abort(osb->sb, "Detected aborted journal");
                        ret = -EROFS;
                }
-               goto done_free;
+               return ERR_PTR(ret);
        }
 
        atomic_inc(&(osb->journal->j_num_trans));
 
-       mlog_exit_ptr(handle);
        return handle;
-
-done_free:
-       if (handle)
-               kfree(handle);
-
-       mlog_exit(ret);
-       return ERR_PTR(ret);
 }
 
 void ocfs2_commit_trans(struct ocfs2_super *osb,
 
  * perfectly legal to go through an entire transaction without having
  * dirtied any buffers. */
 struct ocfs2_journal_handle *ocfs2_start_trans(struct ocfs2_super *osb,
-                                              struct ocfs2_journal_handle *handle,
                                               int max_buffs);
 void                        ocfs2_commit_trans(struct ocfs2_super *osb,
                                                struct ocfs2_journal_handle *handle);
 
        }
 
        /* WINDOW_MOVE_CREDITS is a bit heavy... */
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_WINDOW_MOVE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
        if (IS_ERR(handle)) {
                mlog_errno(PTR_ERR(handle));
                handle = NULL;
                goto out_mutex;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_WINDOW_MOVE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                goto bail;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_WINDOW_MOVE_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_WINDOW_MOVE_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
 
                }
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_MKNOD_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_MKNOD_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                goto out_unlock_inode;
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_LINK_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_LINK_CREDITS);
        if (IS_ERR(handle)) {
                err = PTR_ERR(handle);
                handle = NULL;
                }
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_UNLINK_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_UNLINK_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                }
        }
 
-       handle = ocfs2_start_trans(osb, NULL, OCFS2_RENAME_CREDITS);
+       handle = ocfs2_start_trans(osb, OCFS2_RENAME_CREDITS);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
                }
        }
 
-       handle = ocfs2_start_trans(osb, NULL, credits);
+       handle = ocfs2_start_trans(osb, credits);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;
 
 
        credits = ocfs2_calc_group_alloc_credits(osb->sb,
                                                 le16_to_cpu(cl->cl_cpg));
-       handle = ocfs2_start_trans(osb, handle, credits);
+       handle = ocfs2_start_trans(osb, credits);
        if (IS_ERR(handle)) {
                status = PTR_ERR(handle);
                handle = NULL;