linux/fs/btrfs/orphan.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (C) 2008 Red Hat.  All rights reserved.
   4 */
   5
   6#include "ctree.h"
   7#include "disk-io.h"
   8
   9int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
  10                             struct btrfs_root *root, u64 offset)
  11{
  12        struct btrfs_path *path;
  13        struct btrfs_key key;
  14        int ret = 0;
  15
  16        key.objectid = BTRFS_ORPHAN_OBJECTID;
  17        key.type = BTRFS_ORPHAN_ITEM_KEY;
  18        key.offset = offset;
  19
  20        path = btrfs_alloc_path();
  21        if (!path)
  22                return -ENOMEM;
  23
  24        ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
  25
  26        btrfs_free_path(path);
  27        return ret;
  28}
  29
  30int btrfs_del_orphan_item(struct btrfs_trans_handle *trans,
  31                          struct btrfs_root *root, u64 offset)
  32{
  33        struct btrfs_path *path;
  34        struct btrfs_key key;
  35        int ret = 0;
  36
  37        key.objectid = BTRFS_ORPHAN_OBJECTID;
  38        key.type = BTRFS_ORPHAN_ITEM_KEY;
  39        key.offset = offset;
  40
  41        path = btrfs_alloc_path();
  42        if (!path)
  43                return -ENOMEM;
  44
  45        ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
  46        if (ret < 0)
  47                goto out;
  48        if (ret) { /* JDM: Really? */
  49                ret = -ENOENT;
  50                goto out;
  51        }
  52
  53        ret = btrfs_del_item(trans, root, path);
  54
  55out:
  56        btrfs_free_path(path);
  57        return ret;
  58}
  59