FS#51930 - [snapper] Using btrfs-progs from testing breakds snapper (missing libbtrfs.so refereced)

Attached to Project: Community Packages
Opened by Adrián Pérez de Castro (aperezdc) - Wednesday, 23 November 2016, 06:23 GMT
Last edited by Massimiliano Torromeo (mtorromeo) - Wednesday, 30 November 2016, 22:46 GMT
Task Type Bug Report
Category Packages
Status Closed
Assigned To Massimiliano Torromeo (mtorromeo)
Architecture All
Severity High
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

Details

Description:
When using btrfs-progs from “testing”, the currently available version of snapper from “community” does not work.

Additional info:

* snapper version 0.3.3-3 (from “community”)
* btrfs-progs 4.8.3-1 version (from “testing”)



Steps to reproduce:

1. Enable the ”testing” repository in /etc/pacman.conf.
2. Install btrfs-progs and snapper.
3. Configure snapper todo snapshots of a btrfs subvolume
(instructions: https://wiki.archlinux.org/index.php/Snapper)
4. Perform an operation using the snapper CLI tool which requires talking over D-Bus to the snapperd daemon. For example, take a snapshot (“snapper -c configname create”) and the delete it (“snapper -c configname <snapid>”). The deletion will fail.


Additional information:

If you run snapperd manually logging to the console, and then try deleting a snapshot from another console, you will eventually see:

# snapperd -s -d
[...]
snapperd: symbol lookup error: /usr/lib/libbtrfs.so.0: undefined symbol: lookup_path_rootid

I think this can be fixed by rebuilding snapper against the new version of libbtrfs provided by btrfs-progs.
This task depends upon

Closed by  Massimiliano Torromeo (mtorromeo)
Wednesday, 30 November 2016, 22:46 GMT
Reason for closing:  Fixed
Comment by Adrián Pérez de Castro (aperezdc) - Wednesday, 23 November 2016, 06:29 GMT
I tried rebuilding snapper 0.3.3 locally, but it fails due to API changes in the updated libbtrfs from the “testing” package. Log of the compiler error follows.

---

BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::create_snapshot(int, int, const string&, bool, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:138:24: error: ‘btrfs_qgroup_inherit’ was not declared in this scope
size_t size = sizeof(btrfs_qgroup_inherit) + sizeof(((btrfs_qgroup_inherit*) 0)->qgroups[0]);
^~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:138:78: error: expected primary-expression before ‘)’ token
size_t size = sizeof(btrfs_qgroup_inherit) + sizeof(((btrfs_qgroup_inherit*) 0)->qgroups[0]);
^
BtrfsUtils.cc:138:80: error: expected ‘)’ before numeric constant
size_t size = sizeof(btrfs_qgroup_inherit) + sizeof(((btrfs_qgroup_inherit*) 0)->qgroups[0]);
^
BtrfsUtils.cc:138:95: error: expected ‘)’ before ‘;’ token
size_t size = sizeof(btrfs_qgroup_inherit) + sizeof(((btrfs_qgroup_inherit*) 0)->qgroups[0]);
^
BtrfsUtils.cc:140:64: error: expected primary-expression before ‘)’ token
struct btrfs_qgroup_inherit* inherit = (btrfs_qgroup_inherit*) &buffer[0];
^
BtrfsUtils.cc:142:12: error: request for member ‘num_qgroups’ in ‘* inherit’, which is of non-class type ‘int’
inherit->num_qgroups = 1;
^~~~~~~~~~~
BtrfsUtils.cc:143:12: error: request for member ‘num_ref_copies’ in ‘* inherit’, which is of non-class type ‘int’
inherit->num_ref_copies = 0;
^~~~~~~~~~~~~~
BtrfsUtils.cc:144:12: error: request for member ‘num_excl_copies’ in ‘* inherit’, which is of non-class type ‘int’
inherit->num_excl_copies = 0;
^~~~~~~~~~~~~~~
BtrfsUtils.cc:145:12: error: request for member ‘qgroups’ in ‘* inherit’, which is of non-class type ‘int’
inherit->qgroups[0] = qgroup;
^~~~~~~
BtrfsUtils.cc:147:20: error: ‘BTRFS_SUBVOL_QGROUP_INHERIT’ was not declared in this scope
args_v2.flags |= BTRFS_SUBVOL_QGROUP_INHERIT;
^~~~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:148:11: error: ‘struct btrfs_ioctl_vol_args_v2’ has no member named ‘size’
args_v2.size = size;
^~~~
BtrfsUtils.cc:149:11: error: ‘struct btrfs_ioctl_vol_args_v2’ has no member named ‘qgroup_inherit’
args_v2.qgroup_inherit = inherit;
^~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::set_default_id(int, snapper::BtrfsUtils::subvolid_t)’:
BtrfsUtils.cc:188:20: error: ‘BTRFS_IOC_DEFAULT_SUBVOL’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_DEFAULT_SUBVOL, &id) != 0)
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘snapper::BtrfsUtils::subvolid_t snapper::BtrfsUtils::get_default_id(int)’:
BtrfsUtils.cc:196:37: error: aggregate ‘snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_search_args args;
^~~~
BtrfsUtils.cc:200:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->tree_id = BTRFS_ROOT_TREE_OBJECTID;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:200:20: error: ‘BTRFS_ROOT_TREE_OBJECTID’ was not declared in this scope
sk->tree_id = BTRFS_ROOT_TREE_OBJECTID;
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:201:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->nr_items = 1;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:202:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:202:25: error: ‘BTRFS_ROOT_TREE_DIR_OBJECTID’ was not declared in this scope
sk->max_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:203:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->min_objectid = BTRFS_ROOT_TREE_DIR_OBJECTID;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:204:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->max_type = BTRFS_DIR_ITEM_KEY;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:204:21: error: ‘BTRFS_DIR_ITEM_KEY’ was not declared in this scope
sk->max_type = BTRFS_DIR_ITEM_KEY;
^~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:205:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->min_type = BTRFS_DIR_ITEM_KEY;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:206:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->max_offset = (__u64) -1;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:207:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
sk->max_transid = (__u64) -1;
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:209:20: error: ‘BTRFS_IOC_TREE_SEARCH’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:212:12: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
if (sk->nr_items == 0)
^~
BtrfsUtils.cc:199:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:216:12: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_header’
if (sh->type != BTRFS_DIR_ITEM_KEY)
^~
BtrfsUtils.cc:215:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_header’
struct btrfs_ioctl_search_header* sh = (struct btrfs_ioctl_search_header*) args.buf;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:219:64: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_header’
struct btrfs_dir_item* di = (struct btrfs_dir_item*)(sh + 1);
^
BtrfsUtils.cc:215:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_ioctl_search_header’
struct btrfs_ioctl_search_header* sh = (struct btrfs_ioctl_search_header*) args.buf;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:220:48: error: ‘btrfs_stack_dir_name_len’ was not declared in this scope
int name_len = btrfs_stack_dir_name_len(di);
^
BtrfsUtils.cc:221:44: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_dir_item’
const char* name = (const char*)(di + 1);
^
BtrfsUtils.cc:219:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_dir_item’
struct btrfs_dir_item* di = (struct btrfs_dir_item*)(sh + 1);
^~~~~~~~~~~~~~
BtrfsUtils.cc:225:40: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_dir_item’
return btrfs_disk_key_objectid(&di->location);
^~
BtrfsUtils.cc:219:13: note: forward declaration of ‘struct snapper::BtrfsUtils::get_default_id(int)::btrfs_dir_item’
struct btrfs_dir_item* di = (struct btrfs_dir_item*)(sh + 1);
^~~~~~~~~~~~~~
BtrfsUtils.cc:225:50: error: ‘btrfs_disk_key_objectid’ was not declared in this scope
return btrfs_disk_key_objectid(&di->location);
^
BtrfsUtils.cc: In function ‘std::__cxx11::string snapper::BtrfsUtils::get_subvolume(int, snapper::BtrfsUtils::subvolid_t)’:
BtrfsUtils.cc:234:59: error: ‘btrfs_subvolid_resolve’ was not declared in this scope
if (btrfs_subvolid_resolve(fd, path, sizeof(path), id) != 0)
^
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::quota_enable(int)’:
BtrfsUtils.cc:292:41: error: aggregate ‘snapper::BtrfsUtils::quota_enable(int)::btrfs_ioctl_quota_ctl_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_quota_ctl_args args;
^~~~
BtrfsUtils.cc:294:18: error: ‘BTRFS_QUOTA_CTL_ENABLE’ was not declared in this scope
args.cmd = BTRFS_QUOTA_CTL_ENABLE;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:296:21: error: ‘BTRFS_IOC_QUOTA_CTL’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args) != 0)
^~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::quota_disable(int)’:
BtrfsUtils.cc:304:41: error: aggregate ‘snapper::BtrfsUtils::quota_disable(int)::btrfs_ioctl_quota_ctl_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_quota_ctl_args args;
^~~~
BtrfsUtils.cc:306:18: error: ‘BTRFS_QUOTA_CTL_DISABLE’ was not declared in this scope
args.cmd = BTRFS_QUOTA_CTL_DISABLE;
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:308:21: error: ‘BTRFS_IOC_QUOTA_CTL’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args) != 0)
^~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::quota_rescan(int)’:
BtrfsUtils.cc:316:43: error: aggregate ‘snapper::BtrfsUtils::quota_rescan(int)::btrfs_ioctl_quota_rescan_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_quota_rescan_args args;
^~~~
BtrfsUtils.cc:319:20: error: ‘BTRFS_IOC_QUOTA_RESCAN’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:328:17: error: ‘BTRFS_IOC_QUOTA_RESCAN_STATUS’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_STATUS, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘snapper::BtrfsUtils::qgroup_t snapper::BtrfsUtils::calc_qgroup(uint64_t, snapper::BtrfsUtils::subvolid_t)’:
BtrfsUtils.cc:340:23: error: ‘BTRFS_QGROUP_LEVEL_SHIFT’ was not declared in this scope
return (level << BTRFS_QGROUP_LEVEL_SHIFT) | id;
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘uint64_t snapper::BtrfsUtils::get_level(snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:347:23: error: ‘BTRFS_QGROUP_LEVEL_SHIFT’ was not declared in this scope
return qgroup >> BTRFS_QGROUP_LEVEL_SHIFT;
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘uint64_t snapper::BtrfsUtils::get_id(snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:354:32: error: ‘BTRFS_QGROUP_LEVEL_SHIFT’ was not declared in this scope
return qgroup & ((1LLU << BTRFS_QGROUP_LEVEL_SHIFT) - 1);
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::qgroup_create(int, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:394:44: error: aggregate ‘snapper::BtrfsUtils::qgroup_create(int, snapper::BtrfsUtils::qgroup_t)::btrfs_ioctl_qgroup_create_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_qgroup_create_args args;
^~~~
BtrfsUtils.cc:399:20: error: ‘BTRFS_IOC_QGROUP_CREATE’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QGROUP_CREATE, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::qgroup_destroy(int, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:407:44: error: aggregate ‘snapper::BtrfsUtils::qgroup_destroy(int, snapper::BtrfsUtils::qgroup_t)::btrfs_ioctl_qgroup_create_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_qgroup_create_args args;
^~~~
BtrfsUtils.cc:412:20: error: ‘BTRFS_IOC_QGROUP_CREATE’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QGROUP_CREATE, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::qgroup_assign(int, snapper::BtrfsUtils::qgroup_t, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:420:44: error: aggregate ‘snapper::BtrfsUtils::qgroup_assign(int, snapper::BtrfsUtils::qgroup_t, snapper::BtrfsUtils::qgroup_t)::btrfs_ioctl_qgroup_assign_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_qgroup_assign_args args;
^~~~
BtrfsUtils.cc:426:20: error: ‘BTRFS_IOC_QGROUP_ASSIGN’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QGROUP_ASSIGN, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘void snapper::BtrfsUtils::qgroup_remove(int, snapper::BtrfsUtils::qgroup_t, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:434:44: error: aggregate ‘snapper::BtrfsUtils::qgroup_remove(int, snapper::BtrfsUtils::qgroup_t, snapper::BtrfsUtils::qgroup_t)::btrfs_ioctl_qgroup_assign_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_qgroup_assign_args args;
^~~~
BtrfsUtils.cc:440:20: error: ‘BTRFS_IOC_QGROUP_ASSIGN’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_QGROUP_ASSIGN, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘size_t snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)’:
BtrfsUtils.cc:470:37: error: aggregate ‘snapper::BtrfsUtils::btrfs_ioctl_search_args args’ has incomplete type and cannot be defined
struct btrfs_ioctl_search_args args;
^~~~
BtrfsUtils.cc:474:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->tree_id = BTRFS_QUOTA_TREE_OBJECTID;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:474:20: error: ‘BTRFS_QUOTA_TREE_OBJECTID’ was not declared in this scope
sk->tree_id = BTRFS_QUOTA_TREE_OBJECTID;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:475:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_objectid = 0;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:476:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->max_objectid = BTRFS_LAST_FREE_OBJECTID;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:476:25: error: ‘BTRFS_LAST_FREE_OBJECTID’ was not declared in this scope
sk->max_objectid = BTRFS_LAST_FREE_OBJECTID;
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:477:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_offset = tree_search_opts.min_offset;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:478:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->max_offset = tree_search_opts.max_offset;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:479:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_transid = 0;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:480:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->max_transid = (u64)(-1);
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:480:25: error: ‘u64’ was not declared in this scope
sk->max_transid = (u64)(-1);
^~~
BtrfsUtils.cc:481:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_type = tree_search_opts.min_type;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:482:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->max_type = tree_search_opts.max_type;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:483:8: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->nr_items = 4096;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:489:17: error: ‘BTRFS_IOC_TREE_SEARCH’ was not declared in this scope
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) != 0)
^~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:492:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
if (sk->nr_items == 0)
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:495:7: error: expected ‘;’ before ‘off’
u64 off = 0;
^~~
BtrfsUtils.cc:497:34: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
for (unsigned int i = 0; i < sk->nr_items; ++i)
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:499:93: error: ‘off’ was not declared in this scope
struct btrfs_ioctl_search_header* sh = (struct btrfs_ioctl_search_header*)(args.buf + off);
^~~
BtrfsUtils.cc:501:13: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
if (sh->offset >= tree_search_opts.min_offset && sh->offset <= tree_search_opts.max_offset &&
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:501:58: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
if (sh->offset >= tree_search_opts.min_offset && sh->offset <= tree_search_opts.max_offset &&
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:502:6: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
sh->type >= tree_search_opts.min_type && sh->type <= tree_search_opts.max_type)
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:502:47: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
sh->type >= tree_search_opts.min_type && sh->type <= tree_search_opts.max_type)
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:508:24: error: invalid application of ‘sizeof’ to incomplete type ‘snapper::BtrfsUtils::btrfs_ioctl_search_header’
off += sizeof(*sh) + sh->len;
^
BtrfsUtils.cc:508:30: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
off += sizeof(*sh) + sh->len;
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:510:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_type = sh->type;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:510:24: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
sk->min_type = sh->type;
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:511:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_objectid = sh->objectid;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:511:28: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
sk->min_objectid = sh->objectid;
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:512:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_offset = sh->offset;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:512:26: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
sk->min_offset = sh->offset;
^~
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:515:5: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->nr_items = 4096;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:517:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
if (sk->min_offset < (u64)(-1))
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:518:9: error: invalid use of incomplete type ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
sk->min_offset++;
^~
BtrfsUtils.cc:473:13: note: forward declaration of ‘struct snapper::BtrfsUtils::qgroups_tree_search(int, const snapper::BtrfsUtils::TreeSearchOpts&)::btrfs_ioctl_search_key’
struct btrfs_ioctl_search_key* sk = &args.key;
^~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘snapper::BtrfsUtils::qgroup_t snapper::BtrfsUtils::qgroup_find_free(int, uint64_t)’:
BtrfsUtils.cc:532:38: error: ‘BTRFS_QGROUP_INFO_KEY’ was not declared in this scope
TreeSearchOpts tree_search_opts(BTRFS_QGROUP_INFO_KEY);
^~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:534:64: error: ‘BTRFS_QGROUP_LEVEL_SHIFT’ was not declared in this scope
tree_search_opts.max_offset = calc_qgroup(level, (1LLU << BTRFS_QGROUP_LEVEL_SHIFT) - 1);
^~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In lambda function:
BtrfsUtils.cc:538:23: error: invalid use of incomplete type ‘const struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
qgroups.push_back(sh.offset);
^
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘std::vector<long unsigned int> snapper::BtrfsUtils::qgroup_query_children(int, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:563:38: error: ‘BTRFS_QGROUP_RELATION_KEY’ was not declared in this scope
TreeSearchOpts tree_search_opts(BTRFS_QGROUP_RELATION_KEY);
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In lambda function:
BtrfsUtils.cc:568:19: error: invalid use of incomplete type ‘const struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
ret.push_back(sh.objectid);
^
BtrfsUtils.cc:456:24: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_header’
const struct btrfs_ioctl_search_header& sh)> callback;
^~~~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In function ‘snapper::BtrfsUtils::QGroupUsage snapper::BtrfsUtils::qgroup_query_usage(int, snapper::BtrfsUtils::qgroup_t)’:
BtrfsUtils.cc:582:38: error: ‘BTRFS_QGROUP_INFO_KEY’ was not declared in this scope
TreeSearchOpts tree_search_opts(BTRFS_QGROUP_INFO_KEY);
^~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc: In lambda function:
BtrfsUtils.cc:587:33: error: aggregate ‘snapper::BtrfsUtils::qgroup_query_usage(int, snapper::BtrfsUtils::qgroup_t)::<lambda(const snapper::BtrfsUtils::btrfs_ioctl_search_args&, const snapper::BtrfsUtils::btrfs_ioctl_search_header&)>::btrfs_qgroup_info_item info’ has incomplete type and cannot be defined
struct btrfs_qgroup_info_item info;
^~~~
BtrfsUtils.cc:588:54: error: invalid use of incomplete type ‘const struct snapper::BtrfsUtils::btrfs_ioctl_search_args’
memcpy(&info, (struct btrfs_qgroup_info_item*)(args.buf + sizeof(sh)), sizeof(info));
^
BtrfsUtils.cc:455:38: note: forward declaration of ‘struct snapper::BtrfsUtils::btrfs_ioctl_search_args’
std::function<void(const struct btrfs_ioctl_search_args& args,
^~~~~~~~~~~~~~~~~~~~~~~
BtrfsUtils.cc:588:70: error: invalid application of ‘sizeof’ to incomplete type ‘const snapper::BtrfsUtils::btrfs_ioctl_search_header’
memcpy(&info, (struct btrfs_qgroup_info_item*)(args.buf + sizeof(sh)), sizeof(info));
^
BtrfsUtils.cc:590:56: error: ‘le64_to_cpu’ was not declared in this scope
qgroup_usage.referenced = le64_to_cpu(info.referenced);
^
make[2]: *** [Makefile:560: BtrfsUtils.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
mv -f .deps/Hooks.Tpo .deps/Hooks.Plo
Btrfs.cc: In member function ‘virtual void snapper::Btrfs::deleteSnapshot(unsigned int) const’:
Btrfs.cc:411:53: error: ‘subvolid’ was not declared in this scope
qgroup_destroy(subvolume_dir.fd(), calc_qgroup(0, subvolid));
^~~~~~~~
Btrfs.cc: In member function ‘virtual void snapper::Btrfs::sync() const’:
Btrfs.cc:1527:22: warning: unused variable ‘subvolid’ [-Wunused-variable]
for (subvolid_t subvolid : deleted_subvolids)
^~~~~~~~
make[2]: *** [Makefile:560: Btrfs.lo] Error 1
make[2]: Leaving directory '/tmp/snapper/src/snapper-0.3.3/snapper'
make[1]: *** [Makefile:480: all-recursive] Error 1
make[1]: Leaving directory '/tmp/snapper/src/snapper-0.3.3'
make: *** [Makefile:389: all] Error 2
Comment by Adrián Pérez de Castro (aperezdc) - Wednesday, 23 November 2016, 06:32 GMT
It turns out that the issue was already reported upstream: https://github.com/openSUSE/snapper/issues/294
Comment by Doug Newgard (Scimmia) - Monday, 28 November 2016, 17:01 GMT
Sounds like the btrfs API/ABI isn't stable if they make these kind of changes in a micro-version release.
Comment by Adrián Pérez de Castro (aperezdc) - Monday, 28 November 2016, 18:17 GMT
From the upstream issue, it seems that there was an unintended API/ABI brekage in version 4.8.3, but things should work normally with 4.8.4
Comment by Adrián Pérez de Castro (aperezdc) - Wednesday, 30 November 2016, 18:25 GMT
FWIW, I have been running a couple of machines without any issue after updating to btrfs-progs 4.8.4

Probably this issue can be closed.

Loading...