From 4e84c8251ac6fa4b929ebde3d3be77d37f7d229b Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Thu, 18 Jan 2018 16:07:19 +0800 Subject: btrfs-progs: check: Move link_inode_to_lostfound function to common.c Reviewed-by: Su Yue Signed-off-by: Qu Wenruo Signed-off-by: David Sterba --- check/main.c | 92 ------------------------------------------------------------ 1 file changed, 92 deletions(-) (limited to 'check/main.c') diff --git a/check/main.c b/check/main.c index 5ad249c9..dc3ead9d 100644 --- a/check/main.c +++ b/check/main.c @@ -2960,98 +2960,6 @@ out: return ret; } -static int get_highest_inode(struct btrfs_trans_handle *trans, - struct btrfs_root *root, - struct btrfs_path *path, - u64 *highest_ino) -{ - struct btrfs_key key, found_key; - int ret; - - btrfs_init_path(path); - key.objectid = BTRFS_LAST_FREE_OBJECTID; - key.offset = -1; - key.type = BTRFS_INODE_ITEM_KEY; - ret = btrfs_search_slot(trans, root, &key, path, -1, 1); - if (ret == 1) { - btrfs_item_key_to_cpu(path->nodes[0], &found_key, - path->slots[0] - 1); - *highest_ino = found_key.objectid; - ret = 0; - } - if (*highest_ino >= BTRFS_LAST_FREE_OBJECTID) - ret = -EOVERFLOW; - btrfs_release_path(path); - return ret; -} - -/* - * Link inode to dir 'lost+found'. Increase @ref_count. - * - * Returns 0 means success. - * Returns <0 means failure. - */ -static int link_inode_to_lostfound(struct btrfs_trans_handle *trans, - struct btrfs_root *root, - struct btrfs_path *path, - u64 ino, char *namebuf, u32 name_len, - u8 filetype, u64 *ref_count) -{ - char *dir_name = "lost+found"; - u64 lost_found_ino; - int ret; - u32 mode = 0700; - - btrfs_release_path(path); - ret = get_highest_inode(trans, root, path, &lost_found_ino); - if (ret < 0) - goto out; - lost_found_ino++; - - ret = btrfs_mkdir(trans, root, dir_name, strlen(dir_name), - BTRFS_FIRST_FREE_OBJECTID, &lost_found_ino, - mode); - if (ret < 0) { - error("failed to create '%s' dir: %s", dir_name, strerror(-ret)); - goto out; - } - ret = btrfs_add_link(trans, root, ino, lost_found_ino, - namebuf, name_len, filetype, NULL, 1, 0); - /* - * Add ".INO" suffix several times to handle case where - * "FILENAME.INO" is already taken by another file. - */ - while (ret == -EEXIST) { - /* - * Conflicting file name, add ".INO" as suffix * +1 for '.' - */ - if (name_len + count_digits(ino) + 1 > BTRFS_NAME_LEN) { - ret = -EFBIG; - goto out; - } - snprintf(namebuf + name_len, BTRFS_NAME_LEN - name_len, - ".%llu", ino); - name_len += count_digits(ino) + 1; - ret = btrfs_add_link(trans, root, ino, lost_found_ino, namebuf, - name_len, filetype, NULL, 1, 0); - } - if (ret < 0) { - error("failed to link the inode %llu to %s dir: %s", - ino, dir_name, strerror(-ret)); - goto out; - } - - ++*ref_count; - printf("Moving file '%.*s' to '%s' dir since it has no valid backref\n", - name_len, namebuf, dir_name); -out: - btrfs_release_path(path); - if (ret) - error("failed to move file '%.*s' to '%s' dir", name_len, - namebuf, dir_name); - return ret; -} - static int repair_inode_nlinks(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, -- cgit v1.2.3