Re: [PATCH 1/2] bcache-tools: make --discard a per device option

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

 



On 6/25/21 9:30 AM, yanhuan916@xxxxxxxxx wrote:
> From: Huan Yan <yanhuan916@xxxxxxxxx>
>
> This patch make --discard option more flexible, it can be indicated after each
> backing or cache device.

NACK.

Reason 1,  Only cache device requires discard in bcache-tools. Backing
device will be handled by upper layer like mkfs.
Reason 2, the patch format does not follow current bcache-tools patch
format style.

Coly Li

> ---
>  make.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
>  1 file changed, 48 insertions(+), 14 deletions(-)
>
> diff --git a/make.c b/make.c
> index 34d8011..39b381a 100644
> --- a/make.c
> +++ b/make.c
> @@ -402,6 +402,18 @@ static void write_sb(char *dev, struct sb_context *sbc, bool bdev, bool force)
>  		       (unsigned int) sb.version,
>  		       sb.block_size,
>  		       data_offset);
> +
> +		/* Attempting to discard backing device
> +		 */
> +		if (discard) {
> +			if (blkdiscard_all(dev, fd) < 0) {
> +				fprintf(stderr,
> +					"Failed to discard device %s, %s\n",
> +					dev, strerror(errno));
> +				exit(EXIT_FAILURE);
> +			}
> +		}
> +
>  		putchar('\n');
>  	} else {
>  		if (nvdimm_meta)
> @@ -446,8 +458,15 @@ static void write_sb(char *dev, struct sb_context *sbc, bool bdev, bool force)
>  
>  		/* Attempting to discard cache device
>  		 */
> -		if (discard)
> -			blkdiscard_all(dev, fd);
> +		if (discard) {
> +			if (blkdiscard_all(dev, fd) < 0) {
> +				fprintf(stderr,
> +					"Failed to discard device %s, %s\n",
> +					dev, strerror(errno));
> +				exit(EXIT_FAILURE);
> +			}
> +		}
> +
>  		putchar('\n');
>  	}
>  
> @@ -660,21 +679,27 @@ static unsigned int get_blocksize(const char *path)
>  int make_bcache(int argc, char **argv)
>  {
>  	int c;
> -	unsigned int i;
> +	unsigned int i, n;
>  	int cdev = -1, bdev = -1, mdev = -1;
>  	unsigned int ncache_devices = 0, ncache_nvm_devices = 0;
>  	unsigned int nbacking_devices = 0;
>  	char *cache_devices[argc];
>  	char *cache_nvm_devices[argc];
>  	char *backing_devices[argc];
> +	bool cache_devices_discard[argc];
> +	bool backing_devices_discard[argc];
> +	bool *device_discard = NULL;
>  	char label[SB_LABEL_SIZE] = { 0 };
>  	unsigned int block_size = 0, bucket_size = 1024;
> -	int writeback = 0, discard = 0, wipe_bcache = 0, force = 0;
> +	int writeback = 0, wipe_bcache = 0, force = 0;
>  	unsigned int cache_replacement_policy = 0;
>  	uint64_t data_offset = BDEV_DATA_START_DEFAULT;
>  	uuid_t set_uuid;
>  	struct sb_context sbc;
>  
> +	memset(cache_devices_discard, 0, sizeof(cache_devices_discard));
> +	memset(backing_devices_discard, 0, sizeof(backing_devices_discard));
> +
>  	uuid_generate(set_uuid);
>  
>  	struct option opts[] = {
> @@ -685,10 +710,8 @@ int make_bcache(int argc, char **argv)
>  		{ "block",		1, NULL,	'w' },
>  		{ "writeback",		0, &writeback,	1 },
>  		{ "wipe-bcache",	0, &wipe_bcache,	1 },
> -		{ "discard",		0, &discard,	1 },
> -		{ "cache_replacement_policy", 1, NULL, 'p' },
> +		{ "discard",		0, NULL,	'd' },
>  		{ "cache-replacement-policy", 1, NULL, 'p' },
> -		{ "data_offset",	1, NULL,	'o' },
>  		{ "data-offset",	1, NULL,	'o' },
>  		{ "cset-uuid",		1, NULL,	'u' },
>  		{ "help",		0, NULL,	'h' },
> @@ -710,6 +733,10 @@ int make_bcache(int argc, char **argv)
>  		case 'M':
>  			mdev = 1;
>  			break;
> +		case 'd':
> +			if (device_discard)
> +				*device_discard = true;
> +			break;
>  		case 'b':
>  			bucket_size =
>  				hatoi_validate(optarg, "bucket size", UINT_MAX);
> @@ -762,15 +789,20 @@ int make_bcache(int argc, char **argv)
>  			}
>  
>  			if (bdev > 0) {
> -				backing_devices[nbacking_devices++] = optarg;
> -				printf("backing_devices[%d]: %s\n", nbacking_devices - 1, optarg);
> +				n = nbacking_devices++;
> +				backing_devices[n] = optarg;
> +				printf("backing_devices[%d]: %s\n", n, optarg);
> +				device_discard = &backing_devices_discard[n];
>  				bdev = -1;
>  			} else if (cdev > 0) {
> -				cache_devices[ncache_devices++] = optarg;
> -				printf("cache_devices[%d]: %s\n", ncache_devices - 1, optarg);
> +				n = ncache_devices++;
> +				cache_devices[n] = optarg;
> +				printf("cache_devices[%d]: %s\n", n, optarg);
> +				device_discard = &cache_devices_discard[n];
>  				cdev = -1;
>  			} else if (mdev > 0) {
> -				cache_nvm_devices[ncache_nvm_devices++] = optarg;
> +				n = ncache_nvm_devices++;
> +				cache_nvm_devices[n] = optarg;
>  				mdev = -1;
>  			}
>  			break;
> @@ -806,7 +838,6 @@ int make_bcache(int argc, char **argv)
>  	sbc.block_size = block_size;
>  	sbc.bucket_size = bucket_size;
>  	sbc.writeback = writeback;
> -	sbc.discard = discard;
>  	sbc.wipe_bcache = wipe_bcache;
>  	sbc.cache_replacement_policy = cache_replacement_policy;
>  	sbc.data_offset = data_offset;
> @@ -814,13 +845,16 @@ int make_bcache(int argc, char **argv)
>  	sbc.label = label;
>  	sbc.nvdimm_meta = (ncache_nvm_devices > 0) ? true : false;
>  
> -	for (i = 0; i < ncache_devices; i++)
> +	for (i = 0; i < ncache_devices; i++) {
> +		sbc.discard = cache_devices_discard[i];
>  		write_sb(cache_devices[i], &sbc, false, force);
> +	}
>  
>  	for (i = 0; i < nbacking_devices; i++) {
>  		check_data_offset_for_zoned_device(backing_devices[i],
>  						   &sbc.data_offset);
>  
> +		sbc.discard = backing_devices_discard[i];
>  		write_sb(backing_devices[i], &sbc, true, force);
>  	}
>  




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux