diff mbox series

btrfs: add new filter for missing devices

Message ID 20210903105047.1118101-1-nborisov@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: add new filter for missing devices | expand

Commit Message

Nikolay Borisov Sept. 3, 2021, 10:50 a.m. UTC
There are pending changes to btrfs progs which make the output of
'btrfs fi show' more useful w.r.t to misisng devices. I.e instead of
printing a single '*** Some devices missing'  at the end it now produces
one line per missing device:

Total devices 2 FS bytes used 128.00KiB
	devid    1 size 5.00GiB used 1.26GiB path /dev/loop0
	devid    2 size 0 used 0 path /dev/loop1 ***MISSING***

This obviously will break all existing tests so in anticipation for this
change landing the filter is being added.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 common/filter.btrfs | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

Comments

Nikolay Borisov Sept. 10, 2021, 10:44 a.m. UTC | #1
On 3.09.21 г. 13:50, Nikolay Borisov wrote:
> There are pending changes to btrfs progs which make the output of
> 'btrfs fi show' more useful w.r.t to misisng devices. I.e instead of
> printing a single '*** Some devices missing'  at the end it now produces
> one line per missing device:
> 
> Total devices 2 FS bytes used 128.00KiB
> 	devid    1 size 5.00GiB used 1.26GiB path /dev/loop0
> 	devid    2 size 0 used 0 path /dev/loop1 ***MISSING***
> 
> This obviously will break all existing tests so in anticipation for this
> change landing the filter is being added.
> 
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>

Please ignore this patch for now as we haven't decided on what the
format of the output should be so I'll likely be sending a V2 once this
is decided.
diff mbox series

Patch

diff --git a/common/filter.btrfs b/common/filter.btrfs
index d4169cc69112..37b92478c939 100644
--- a/common/filter.btrfs
+++ b/common/filter.btrfs
@@ -13,6 +13,22 @@  _filter_devid()
 	sed -e "s/\(devid\)\s\+[0-9]\+/\1 <DEVID>/g"
 }
 
+
+# Filter btrfs fi show output to match the old format, before the more verbose
+# missing device lines were add
+_filter_btrfs_missing_line()
+{
+	awk '
+	BEGIN {should_print=0}
+# skip empty lines as btrfs progs inserts such
+	/^$/ {next}
+	!/.*\*\*\*MISSING\*\*\*/ {print $0}
+	/.*\*\*\*MISSING\*\*\*/ {should_print=1}
+# The final \n adds an extra empty line to match with the original output
+	END {if (should_print) {print "\t*** Some devices missing"} print "\n"}
+	'
+}
+
 # If passed a number as first arg, filter that number of devices
 # If passed a UUID as second arg, filter that exact UUID
 _filter_btrfs_filesystem_show()
@@ -31,9 +47,9 @@  _filter_btrfs_filesystem_show()
 	fi
 
 	# the uniq collapses all device lines into 1
-	_filter_uuid $UUID | _filter_scratch | _filter_scratch_pool | \
-	_filter_size | _filter_btrfs_version | _filter_devid | \
-	_filter_zero_size | \
+	_filter_btrfs_missing_line | _filter_uuid $UUID | _filter_scratch | \
+	_filter_scratch_pool | _filter_size | _filter_btrfs_version | \
+	_filter_devid | _filter_zero_size | \
 	sed -e "s/\(Total devices\) $NUMDEVS/\1 $NUM_SUBST/g" | \
 	uniq
 }