Re: [PATCH][BTRFS-PROGS][CLEANUP] Remove gotos

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/22/2014 12:34 PM, Satoru Takeuchi wrote:
> On 2014/12/22 3:07, Goffredo Baroncelli wrote:
>> Change a spagetti-style code (there are some "interlaced" gotos) to
>> a more modern style...
>>
>> This patch removes also some #define from utils.h, which define
>> constants used only in cmds-filesystems.c . Instead an enum
>> is used locally in cmds-filesystems.c .
> 
> I'm happy if you have a regression test for this patch
> since such kind of change often cause regression.

I am impressed, this is the first time that I received this kind
of request on btrfs ml....

In which form you want this "regression test" ? I see a
directory tests/ under btrfs-progs; but also I saw
reference to xfstest...



> 
> Thanks,
> Satoru
> 
>> ---
>>   cmds-filesystem.c | 106 ++++++++++++++++++++++++++++--------------------------
>>   utils.h           |   3 --
>>   2 files changed, 55 insertions(+), 54 deletions(-)
>>
>> diff --git a/cmds-filesystem.c b/cmds-filesystem.c
>> index 7eaccb9..08ddb5d 100644
>> --- a/cmds-filesystem.c
>> +++ b/cmds-filesystem.c
>> @@ -40,6 +40,11 @@
>>   #include "list_sort.h"
>>   #include "disk-io.h"
>>   
>> +enum filesystem_show_scan_method {
>> +	BTRFS_SCAN_ANY,
>> +	BTRFS_SCAN_MOUNTED,
>> +	BTRFS_SCAN_LBLKID
>> +};
>>   
>>   /*
>>    * for btrfs fi show, we maintain a hash of fsids we've already printed.
>> @@ -853,7 +858,7 @@ static int cmd_show(int argc, char **argv)
>>   	char *search = NULL;
>>   	int ret;
>>   	/* default, search both kernel and udev */
>> -	int where = -1;
>> +	int where = BTRFS_SCAN_ANY;
>>   	int type = 0;
>>   	char mp[BTRFS_PATH_NAME_MAX + 1];
>>   	char path[PATH_MAX];
>> @@ -930,61 +935,60 @@ static int cmd_show(int argc, char **argv)
>>   				uuid_unparse(fsid, uuid_buf);
>>   				search = uuid_buf;
>>   				type = BTRFS_ARG_UUID;
>> -				goto devs_only;
>> +				where = BTRFS_SCAN_LBLKID;
>>   			}
>>   		}
>>   	}
>>   
>> -	if (where == BTRFS_SCAN_LBLKID)
>> -		goto devs_only;
>> -
>> -	/* show mounted btrfs */
>> -	ret = btrfs_scan_kernel(search);
>> -	if (search && !ret) {
>> -		/* since search is found we are done */
>> -		goto out;
>> -	}
>> -
>> -	/* shows mounted only */
>> -	if (where == BTRFS_SCAN_MOUNTED)
>> -		goto out;
>> -
>> -devs_only:
>> -	ret = btrfs_scan_lblkid();
>> -
>> -	if (ret) {
>> -		fprintf(stderr, "ERROR: %d while scanning\n", ret);
>> -		return 1;
>> -	}
>> -
>> -	found = search_umounted_fs_uuids(&all_uuids, search);
>> -	if (found < 0) {
>> -		fprintf(stderr,
>> -			"ERROR: %d while searching target device\n", ret);
>> -		return 1;
>> -	}
>> -
>> -	/*
>> -	 * The seed/sprout mapping are not detected yet,
>> -	 * do mapping build for all umounted fs
>> -	 */
>> -	ret = map_seed_devices(&all_uuids);
>> -	if (ret) {
>> -		fprintf(stderr,
>> -			"ERROR: %d while mapping seed devices\n", ret);
>> -		return 1;
>> +	if (where == BTRFS_SCAN_MOUNTED || where == BTRFS_SCAN_ANY) {
>> +	
>> +		/* show mounted btrfs */
>> +		ret = btrfs_scan_kernel(search);
>> +		if (search && !ret) {
>> +			/* since search is found we are done */
>> +			goto out;
>> +		}
>> +	
>>   	}
>> -
>> -	list_for_each_entry(fs_devices, &all_uuids, list)
>> -		print_one_uuid(fs_devices);
>> -
>> -	if (search && !found)
>> -		ret = 1;
>> -
>> -	while (!list_empty(&all_uuids)) {
>> -		fs_devices = list_entry(all_uuids.next,
>> -					struct btrfs_fs_devices, list);
>> -		free_fs_devices(fs_devices);
>> +	
>> +	if (where == BTRFS_SCAN_LBLKID || where == BTRFS_SCAN_ANY) {
>> +		
>> +		ret = btrfs_scan_lblkid();
>> +	
>> +		if (ret) {
>> +			fprintf(stderr, "ERROR: %d while scanning\n", ret);
>> +			return 1;
>> +		}
>> +	
>> +		found = search_umounted_fs_uuids(&all_uuids, search);
>> +		if (found < 0) {
>> +			fprintf(stderr,
>> +				"ERROR: %d while searching target device\n", ret);
>> +			return 1;
>> +		}
>> +	
>> +		/*
>> +		 * The seed/sprout mapping are not detected yet,
>> +		 * do mapping build for all umounted fs
>> +		 */
>> +		ret = map_seed_devices(&all_uuids);
>> +		if (ret) {
>> +			fprintf(stderr,
>> +				"ERROR: %d while mapping seed devices\n", ret);
>> +			return 1;
>> +		}
>> +	
>> +		list_for_each_entry(fs_devices, &all_uuids, list)
>> +			print_one_uuid(fs_devices);
>> +	
>> +		if (search && !found)
>> +			ret = 1;
>> +	
>> +		while (!list_empty(&all_uuids)) {
>> +			fs_devices = list_entry(all_uuids.next,
>> +						struct btrfs_fs_devices, list);
>> +			free_fs_devices(fs_devices);
>> +		}
>>   	}
>>   out:
>>   	printf("%s\n", BTRFS_BUILD_VERSION);
>> diff --git a/utils.h b/utils.h
>> index 0464c2d..603cdfb 100644
>> --- a/utils.h
>> +++ b/utils.h
>> @@ -26,9 +26,6 @@
>>   #define BTRFS_MKFS_SYSTEM_GROUP_SIZE (4 * 1024 * 1024)
>>   #define BTRFS_MKFS_SMALL_VOLUME_SIZE (1024 * 1024 * 1024)
>>   
>> -#define BTRFS_SCAN_MOUNTED	(1ULL << 0)
>> -#define BTRFS_SCAN_LBLKID	(1ULL << 1)
>> -
>>   #define BTRFS_UPDATE_KERNEL	1
>>   
>>   #define BTRFS_ARG_UNKNOWN	0
>>
> 
> 


-- 
gpg @keyserver.linux.it: Goffredo Baroncelli <kreijackATinwind.it>
Key fingerprint BBF5 1610 0B64 DAC6 5F7D  17B2 0EDA 9B37 8B82 E0B5
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux