struct extent_state *state;
        struct extent_state *prealloc = NULL;
        struct rb_node *node;
+       unsigned long flags;
        int err;
        int set = 0;
 
                        return -ENOMEM;
        }
 
-       write_lock_irq(&tree->lock);
+       write_lock_irqsave(&tree->lock, flags);
        /*
         * this search will find the extents that end after
         * our range starts
        goto search_again;
 
 out:
-       write_unlock_irq(&tree->lock);
+       write_unlock_irqrestore(&tree->lock, flags);
        if (prealloc)
                free_extent_state(prealloc);
 
 search_again:
        if (start >= end)
                goto out;
-       write_unlock_irq(&tree->lock);
+       write_unlock_irqrestore(&tree->lock, flags);
        if (mask & __GFP_WAIT)
                cond_resched();
        goto again;
        struct extent_state *state;
        struct extent_state *prealloc = NULL;
        struct rb_node *node;
+       unsigned long flags;
        int err = 0;
        int set;
        u64 last_start;
                        return -ENOMEM;
        }
 
-       write_lock_irq(&tree->lock);
+       write_lock_irqsave(&tree->lock, flags);
        /*
         * this search will find all the extents that end after
         * our range starts.
        goto search_again;
 
 out:
-       write_unlock_irq(&tree->lock);
+       write_unlock_irqrestore(&tree->lock, flags);
        if (prealloc)
                free_extent_state(prealloc);
 
 search_again:
        if (start > end)
                goto out;
-       write_unlock_irq(&tree->lock);
+       write_unlock_irqrestore(&tree->lock, flags);
        if (mask & __GFP_WAIT)
                cond_resched();
        goto again;