u64 target;
        u64 nread = 0;
        u64 gen;
-       int direction = path->reada;
        struct extent_buffer *eb;
        u32 nr;
        u32 blocksize;
        nr = slot;
 
        while (1) {
-               if (direction < 0) {
+               if (path->reada == READA_BACK) {
                        if (nr == 0)
                                break;
                        nr--;
-               } else if (direction > 0) {
+               } else if (path->reada == READA_FORWARD) {
                        nr++;
                        if (nr >= nritems)
                                break;
                }
-               if (path->reada < 0 && objectid) {
+               if (path->reada == READA_BACK && objectid) {
                        btrfs_node_key(node, &disk_key, nr);
                        if (btrfs_disk_key_objectid(&disk_key) != objectid)
                                break;
        btrfs_set_path_blocking(p);
 
        free_extent_buffer(tmp);
-       if (p->reada)
+       if (p->reada != READA_NONE)
                reada_for_search(root, p, level, slot, key->objectid);
 
        btrfs_release_path(p);
 
  * The slots array records the index of the item or block pointer
  * used while walking the tree.
  */
+enum { READA_NONE = 0, READA_BACK, READA_FORWARD };
 struct btrfs_path {
        struct extent_buffer *nodes[BTRFS_MAX_LEVEL];
        int slots[BTRFS_MAX_LEVEL];
 
         */
        path->skip_locking = 1;
        path->search_commit_root = 1;
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        key.objectid = last;
        key.offset = 0;
        if (!path)
                return -ENOMEM;
 
-       path->reada = 1;
+       path->reada = READA_FORWARD;
        path->leave_spinning = 1;
        /* this will setup the path even if it fails to insert the back ref */
        ret = insert_inline_extent_backref(trans, fs_info->extent_root, path,
        btrfs_mark_buffer_dirty(leaf);
        btrfs_release_path(path);
 
-       path->reada = 1;
+       path->reada = READA_FORWARD;
        path->leave_spinning = 1;
        /* now insert the actual backref */
        ret = insert_extent_backref(trans, root->fs_info->extent_root,
        }
 
 again:
-       path->reada = 1;
+       path->reada = READA_FORWARD;
        path->leave_spinning = 1;
        ret = btrfs_search_slot(trans, root->fs_info->extent_root, &key,
                                path, 0, 1);
        if (!path)
                return -ENOMEM;
 
-       path->reada = 1;
+       path->reada = READA_FORWARD;
        path->leave_spinning = 1;
 
        is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        cache_gen = btrfs_super_cache_generation(root->fs_info->super_copy);
        if (btrfs_test_opt(root, SPACE_CACHE) &&
 
        }
 
        if (bio->bi_iter.bi_size > PAGE_CACHE_SIZE * 8)
-               path->reada = 2;
+               path->reada = READA_FORWARD;
 
        WARN_ON(bio->bi_vcnt <= 0);
 
 
        if (search_commit) {
                path->skip_locking = 1;
-               path->reada = 2;
+               path->reada = READA_FORWARD;
                path->search_commit_root = 1;
        }
 
 
        /* Since the commit root is read-only, we can safely skip locking. */
        path->skip_locking = 1;
        path->search_commit_root = 1;
-       path->reada = 2;
+       path->reada = READA_FORWARD;
 
        key.objectid = BTRFS_FIRST_FREE_OBJECTID;
        key.offset = 0;
 
                ret = -ENOMEM;
                goto out;
        }
-       path->reada = -1;
+       path->reada = READA_BACK;
 
        key.objectid = BTRFS_ORPHAN_OBJECTID;
        key.type = BTRFS_ORPHAN_ITEM_KEY;
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = -1;
+       path->reada = READA_BACK;
 
        /*
         * We want to drop from the next block forward in case this new size is
        if (!path)
                return -ENOMEM;
 
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        if (key_type == BTRFS_DIR_INDEX_KEY) {
                INIT_LIST_HEAD(&ins_list);
                 * Chances are we'll be called again, so go ahead and do
                 * readahead
                 */
-               path->reada = 1;
+               path->reada = READA_FORWARD;
        }
 
        ret = btrfs_lookup_file_extent(trans, root, path,
 
                return ret;
        }
 
-       path->reada = 2;
+       path->reada = READA_FORWARD;
        /* clone data */
        key.objectid = btrfs_ino(src);
        key.type = BTRFS_EXTENT_DATA_KEY;
 
                err = -ENOMEM;
                goto out;
        }
-       path1->reada = 1;
-       path2->reada = 2;
+       path1->reada = READA_FORWARD;
+       path2->reada = READA_FORWARD;
 
        node = alloc_backref_node(cache);
        if (!node) {
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        reloc_root = root->reloc_root;
        root_item = &reloc_root->root_item;
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        root = read_fs_root(rc->extent_root->fs_info, ref_root);
        if (IS_ERR(root)) {
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 1;
+       path->reada = READA_FORWARD;
 
        ret = prepare_to_relocate(rc);
        if (ret) {
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = -1;
+       path->reada = READA_BACK;
 
        key.objectid = BTRFS_TREE_RELOC_OBJECTID;
        key.type = BTRFS_ROOT_ITEM_KEY;
 
        if (!path)
                return -ENOMEM;
 
-       path->reada = 2;
+       path->reada = READA_FORWARD;
        path->search_commit_root = 1;
        path->skip_locking = 1;
 
 
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 2;
+       path->reada = READA_FORWARD;
 
        key.objectid = device->devid;
        key.offset = start;
                goto out;
        }
 
-       path->reada = 2;
+       path->reada = READA_FORWARD;
        path->search_commit_root = 1;
        path->skip_locking = 1;
 
        if (!path)
                return -ENOMEM;
 
-       path->reada = 2;
+       path->reada = READA_FORWARD;
 
        lock_chunks(root);
 
 
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;
-       path->reada = 2;
+       path->reada = READA_FORWARD;
 
        /* search for our xattrs */
        ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);