}
 
        /*
-        * We don't know the level of the root node until we actually have it
-        * read locked
+        * If the level is set to maximum, we can skip trying to get the read
+        * lock.
         */
-       b = btrfs_read_lock_root_node(root);
-       level = btrfs_header_level(b);
-       if (level > write_lock_level)
-               goto out;
+       if (write_lock_level < BTRFS_MAX_LEVEL) {
+               /*
+                * We don't know the level of the root node until we actually
+                * have it read locked
+                */
+               b = btrfs_read_lock_root_node(root);
+               level = btrfs_header_level(b);
+               if (level > write_lock_level)
+                       goto out;
+
+               /* Whoops, must trade for write lock */
+               btrfs_tree_read_unlock(b);
+               free_extent_buffer(b);
+       }
 
-       /*
-        * whoops, must trade for write lock
-        */
-       btrfs_tree_read_unlock(b);
-       free_extent_buffer(b);
        b = btrfs_lock_root_node(root);
        root_lock = BTRFS_WRITE_LOCK;