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

2018-02-23 Thread Omar Sandoval
On Thu, Feb 22, 2018 at 01:23:45PM +0900, Misono, Tomohiro wrote:
> 
> 
> On 2018/02/16 4:05, Omar Sandoval wrote:
> > From: Omar Sandoval 
> > 
> > Signed-off-by: Omar Sandoval 
> > ---
> >  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.

That's embarrassing, thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

2018-02-21 Thread Misono, Tomohiro


On 2018/02/16 4:05, Omar Sandoval wrote:
> From: Omar Sandoval 
> 
> Signed-off-by: Omar Sandoval 
> ---
>  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 
>  #include 
>  
> +#include 
> +
>  #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, );
> - 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, _only);
> + if (err) {
> + error_btrfs_util(err);
> + return -errno;
> + }
>  
> - ret = ioctl(fd, BTRFS_IOC_SUBVOL_SETFLAGS, );
> - 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html