Re: [PATCH v2 16/27] btrfs-progs: use libbtrfsutil for read-only property

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

 




On 2018/02/16 4:05, Omar Sandoval wrote:
> From: Omar Sandoval <osandov@xxxxxx>
> 
> Signed-off-by: Omar Sandoval <osandov@xxxxxx>
> ---
>  messages.h | 13 ++++++++++++
>  props.c    | 69 +++++++++++++++++++++++---------------------------------------
>  2 files changed, 38 insertions(+), 44 deletions(-)
> 
> diff --git a/messages.h b/messages.h
> index 4999c7b9..004d5167 100644
> --- a/messages.h
> +++ b/messages.h
> @@ -54,6 +54,19 @@
>  			DO_ABORT_ON_ERROR;				\
>  	} while (0)
>  
> +#define error_btrfs_util(err)						\
> +	do {								\
> +		const char *errno_str = strerror(errno);		\
> +		const char *lib_str = btrfs_util_strerror(err)		\

"make D=trace" fails because ";" is missing here.

> +		PRINT_TRACE_ON_ERROR;					\
> +		PRINT_VERBOSE_ERROR;					\
> +		if (lib_str && strcmp(errno_str, lib_str) != 0)		\
> +			__btrfs_error("%s: %s", lib_str, errno_str);	\
> +		else							\
> +			__btrfs_error("%s", errno_str);			\
> +		DO_ABORT_ON_ERROR;					\
> +	} while (0)
> +
>  #define warning(fmt, ...)						\
>  	do {								\
>  		PRINT_TRACE_ON_ERROR;					\
> diff --git a/props.c b/props.c
> index cddbd927..e4edba06 100644
> --- a/props.c
> +++ b/props.c
> @@ -21,6 +21,8 @@
>  #include <fcntl.h>
>  #include <unistd.h>
>  
> +#include <btrfsutil.h>
> +
>  #include "ctree.h"
>  #include "commands.h"
>  #include "utils.h"
> @@ -41,56 +43,35 @@ static int prop_read_only(enum prop_object_type type,
>  			  const char *name,
>  			  const char *value)
>  {
> -	int ret = 0;
> -	int fd = -1;
> -	u64 flags = 0;
> -
> -	fd = open(object, O_RDONLY);
> -	if (fd < 0) {
> -		ret = -errno;
> -		error("failed to open %s: %s", object, strerror(-ret));
> -		goto out;
> -	}
> +	enum btrfs_util_error err;
> +	bool read_only;
>  
> -	ret = ioctl(fd, BTRFS_IOC_SUBVOL_GETFLAGS, &flags);
> -	if (ret < 0) {
> -		ret = -errno;
> -		error("failed to get flags for %s: %s", object,
> -				strerror(-ret));
> -		goto out;
> -	}
> -
> -	if (!value) {
> -		if (flags & BTRFS_SUBVOL_RDONLY)
> -			fprintf(stdout, "ro=true\n");
> -		else
> -			fprintf(stdout, "ro=false\n");
> -		ret = 0;
> -		goto out;
> -	}
> +	if (value) {
> +		if (!strcmp(value, "true")) {
> +			read_only = true;
> +		} else if (!strcmp(value, "false")) {
> +			read_only = false;
> +		} else {
> +			error("invalid value for property: %s", value);
> +			return -EINVAL;
> +		}
>  
> -	if (!strcmp(value, "true")) {
> -		flags |= BTRFS_SUBVOL_RDONLY;
> -	} else if (!strcmp(value, "false")) {
> -		flags = flags & ~BTRFS_SUBVOL_RDONLY;
> +		err = btrfs_util_set_subvolume_read_only(object, read_only);
> +		if (err) {
> +			error_btrfs_util(err);
> +			return -errno;
> +		}
>  	} else {
> -		ret = -EINVAL;
> -		error("invalid value for property: %s", value);
> -		goto out;
> -	}
> +		err = btrfs_util_get_subvolume_read_only(object, &read_only);
> +		if (err) {
> +			error_btrfs_util(err);
> +			return -errno;
> +		}
>  
> -	ret = ioctl(fd, BTRFS_IOC_SUBVOL_SETFLAGS, &flags);
> -	if (ret < 0) {
> -		ret = -errno;
> -		error("failed to set flags for %s: %s", object,
> -				strerror(-ret));
> -		goto out;
> +		printf("ro=%s\n", read_only ? "true" : "false");
>  	}
>  
> -out:
> -	if (fd != -1)
> -		close(fd);
> -	return ret;
> +	return 0;
>  }
>  
>  static int prop_label(enum prop_object_type type,
> 

--
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