From 95f2a87864d9899bb17f037532b91824d202e4ae Mon Sep 17 00:00:00 2001 From: "Bryant G. Duffy-Ly" Date: Mon, 8 Nov 2021 11:29:14 -0600 Subject: [PATCH] Fix scoutfs print hang If a user tries to print a data device exit early if it is data device. Signed-off-by: Bryant G. Duffy-Ly --- utils/src/print.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/utils/src/print.c b/utils/src/print.c index 1e5e996b..f9792c5e 100644 --- a/utils/src/print.c +++ b/utils/src/print.c @@ -922,10 +922,6 @@ static void print_super_block(struct scoutfs_super_block *super, u64 blkno) uuid_unparse(super->uuid, uuid_str); - if (!(le64_to_cpu(super->flags) && SCOUTFS_FLAG_IS_META_BDEV)) - fprintf(stderr, - "**** Printing metadata from a data device! Did you mean to do this? ****\n"); - printf("super blkno %llu\n", blkno); print_block_header(&super->hdr, SCOUTFS_BLOCK_SM_SIZE); printf(" fmt_vers %llu uuid %s\n", @@ -1006,6 +1002,13 @@ static int print_volume(int fd) print_super_block(super, SCOUTFS_SUPER_BLKNO); + if (!(le64_to_cpu(super->flags) & SCOUTFS_FLAG_IS_META_BDEV)) { + fprintf(stderr, + "**** Printing from data device is not allowed ****\n"); + ret = -EINVAL; + goto out; + } + ret = print_quorum_blocks(fd, super); err = print_btree(fd, super, "mounted_clients", &super->mounted_clients, @@ -1072,6 +1075,7 @@ static int print_volume(int fd) if (err && !ret) ret = err; +out: free(super); return ret;