blob: c7eeade1ab04345f8bce277665741a9f07ac6d80 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved.
#
# FS QA Test 228
#
# Test correct operation of free objectid related functionality
#
. ./common/preamble
_begin_fstest auto quick volume
. ./common/filter
_supported_fs btrfs
_require_scratch
_require_btrfs_command inspect-internal dump-tree
_scratch_mkfs > /dev/null
_scratch_mount
# create a new subvolume to validate its objectid is initialized accordingly,
# the expected value is 256 as this is the first free objectid in a new file
# system
$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/newvol >> $seqres.full 2>&1 \
|| _fail "couldn't create subvol"
# Subvolume creation used to commit the transaction used to create it, but after
# the patch "btrfs: don't commit transaction for every subvol create", that
# changed, so sync the fs to commit any open transaction.
$BTRFS_UTIL_PROG filesystem sync $SCRATCH_MNT
$BTRFS_UTIL_PROG inspect-internal dump-tree -t1 $SCRATCH_DEV \
| grep -q "256 ROOT_ITEM" || _fail "First subvol with id 256 doesn't exist"
# create new file in the new subvolume to validate its objectid is set as
# expected
touch $SCRATCH_MNT/newvol/file1 || _fail "Cannot create file in new subvol"
# ensure we have consistent view on-disk
sync
# get output related to the new root's dir entry
output_file=$tmp.output
$BTRFS_UTIL_PROG inspect-internal dump-tree -t5 $SCRATCH_DEV | grep -A2 "256 DIR_ITEM 1903355334" > $output_file
# get the objectid of the new root
new_root_id=$($AWK_PROG '/location key/{printf $3}' $output_file | tr -d '(')
[ $new_root_id -eq 256 ] || _fail "New root id not equal to 256"
# the given root should always be item number 2, since it's the only item
item_seq=$($AWK_PROG '/item/ {printf $2}' $output_file)
[ $item_seq -eq 2 ] || _fail "New root not at item idx 2"
# now parse the structure of the new subvol's tree
$BTRFS_UTIL_PROG inspect-internal dump-tree -t256 $SCRATCH_DEV > $output_file
# this is the subvol's own ino
first_ino=$($AWK_PROG '/item 0/{printf $4}' $output_file | tr -d '(')
[ $first_ino -eq 256 ] || _fail "First ino objectid in subvol not 256"
# this is ino of first file in subvol
second_ino=$($AWK_PROG '/item 4/{printf $4}' $output_file | tr -d '(')
[ $second_ino -eq 257 ] || _fail "Second ino objectid in subvol not 257"
# success, all done
echo "Silence is golden"
status=0
exit
|