const void *value,
                                           int value_len)
 {
-       int ret = 0, i, cp_len, credits;
+       int ret = 0, i, cp_len;
        u16 blocksize = inode->i_sb->s_blocksize;
        u32 p_cluster, num_clusters;
        u32 cpos = 0, bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1);
 
        BUG_ON(clusters > le32_to_cpu(xv->xr_clusters));
 
-       /*
-        * In __ocfs2_xattr_set_value_outside has already been dirtied,
-        * so we don't need to worry about whether ocfs2_extend_trans
-        * will create a new transactio for us or not.
-        */
-       credits = clusters * bpc;
-       ret = ocfs2_extend_trans(handle, credits);
-       if (ret) {
-               mlog_errno(ret);
-               goto out;
-       }
-
        while (cpos < clusters) {
                ret = ocfs2_xattr_get_clusters(inode, cpos, &p_cluster,
                                               &num_clusters, &xv->xr_list);
                                                    xi->value_len);
        u64 value_size;
 
+       /*
+        * Calculate the clusters we need to write.
+        * No matter whether we replace an old one or add a new one,
+        * we need this for writing.
+        */
+       if (xi->value_len > OCFS2_XATTR_INLINE_SIZE)
+               credits += new_clusters *
+                          ocfs2_clusters_to_blocks(inode->i_sb, 1);
+
        if (xis->not_found && xbs->not_found) {
                credits += ocfs2_blocks_per_xattr_bucket(inode->i_sb);