Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:GA
btrfsprogs
2223-btrfs-progs-fi-du-don-t-call-lookup_path_r...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2223-btrfs-progs-fi-du-don-t-call-lookup_path_rootid-for-.patch of Package btrfsprogs
From 680d5506b5417ad6ed58bfe115cef1339270437e Mon Sep 17 00:00:00 2001 From: Goffredo Baroncelli <kreijack@inwind.it> Date: Fri, 18 Aug 2017 09:04:21 +0200 Subject: [PATCH] btrfs-progs: fi du: don't call lookup_path_rootid for BTRFS_EMPTY_SUBVOL_DIR_OBJECTID When ino is BTRFS_EMPTY_SUBVOL_DIR_OBJECTID, the item is not referred to any file-tree. So lookup_path_rootid() doesn't return any meaningful value. As was reported, this can be triggered by $ btrfs sub create test1 $ btrfs sub create test1/test2 $ btrfs sub snap test1 test1.snap $ btrfs fi du -s test1 Total Exclusive Set shared Filename 0.00B 0.00B 0.00B test1 $ btrfs fi du -s test1.snap Total Exclusive Set shared Filename ERROR: cannot check space of 'test1.snap': Inappropriate ioctl for device Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it> Signed-off-by: David Sterba <dsterba@suse.com> --- cmds-fi-du.c | 25 ++++++++++++++++--------- ctree.h | 2 ++ 2 files changed, 18 insertions(+), 9 deletions(-) Index: btrfs-progs-v4.5.3/cmds-fi-du.c =================================================================== --- btrfs-progs-v4.5.3.orig/cmds-fi-du.c +++ btrfs-progs-v4.5.3/cmds-fi-du.c @@ -413,7 +413,6 @@ static int du_add_file(const char *filen u64 file_total = 0; u64 file_shared = 0; u64 dir_set_shared = 0; - u64 subvol; int fd; DIR *dirstream = NULL; @@ -442,16 +441,24 @@ static int du_add_file(const char *filen goto out; } - ret = lookup_ino_rootid(fd, &subvol); - if (ret) - goto out_close; - - if (inode_seen(st.st_ino, subvol)) - goto out_close; - - ret = mark_inode_seen(st.st_ino, subvol); - if (ret) - goto out_close; + /* + * If st.st_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID ==2, there is no any + * related tree + */ + if (st.st_ino != BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) { + u64 subvol; + + ret = lookup_ino_rootid(fd, &subvol); + if (ret) + goto out_close; + + if (inode_seen(st.st_ino, subvol)) + goto out_close; + + ret = mark_inode_seen(st.st_ino, subvol); + if (ret) + goto out_close; + } if (S_ISREG(st.st_mode)) { ret = du_calc_file_space(fd, shared_extents, &file_total, Index: btrfs-progs-v4.5.3/ctree.h =================================================================== --- btrfs-progs-v4.5.3.orig/ctree.h +++ btrfs-progs-v4.5.3/ctree.h @@ -167,6 +167,8 @@ struct btrfs_free_space_ctl; */ #define BTRFS_DEV_ITEMS_OBJECTID 1ULL +#define BTRFS_EMPTY_SUBVOL_DIR_OBJECTID 2ULL + /* * the max metadata block size. This limit is somewhat artificial, * but the memmove costs go through the roof for larger blocks.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor