On 2019/11/27 上午11:48, Marcos Paulo de Souza wrote:
> From: Marcos Paulo de Souza <mpdesouza@xxxxxxxx>
>
> Current btrfs code returns ENOTCONN when the user tries to create a
> qgroup on a subvolume without quota enabled. In order to present a
> meaningful message to the user, we now handle ENOTCONN showing
> the message "quota not enabled".
>
> Signed-off-by: Marcos Paulo de Souza <mpdesouza@xxxxxxxx>
Don't forget the original -EINVAL.
So it needs to cover both -EINVAL (for older kernel) and -ENOTCONN (for
newer kernel).
Thanks,
Qu
> ---
> This patch survived a full btrfs-progs tests run
>
> cmds/qgroup.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/cmds/qgroup.c b/cmds/qgroup.c
> index ba81052a..6bfb4949 100644
> --- a/cmds/qgroup.c
> +++ b/cmds/qgroup.c
> @@ -98,7 +98,9 @@ static int _cmd_qgroup_assign(const struct cmd_struct *cmd, int assign,
>
> ret = ioctl(fd, BTRFS_IOC_QGROUP_ASSIGN, &args);
> if (ret < 0) {
> - error("unable to assign quota group: %m");
> + error("unable to assign quota group: %s",
> + errno == ENOTCONN ? "quota not enabled"
> + : strerror(errno));
> close_file_or_dir(fd, dirstream);
> return 1;
> }
> @@ -152,8 +154,10 @@ static int _cmd_qgroup_create(int create, int argc, char **argv)
> ret = ioctl(fd, BTRFS_IOC_QGROUP_CREATE, &args);
> close_file_or_dir(fd, dirstream);
> if (ret < 0) {
> - error("unable to %s quota group: %m",
> - create ? "create":"destroy");
> + error("unable to %s quota group: %s",
> + create ? "create":"destroy",
> + errno == ENOTCONN ? "quota not enabled"
> + : strerror(errno));
> return 1;
> }
> return 0;
> @@ -447,7 +451,10 @@ static int cmd_qgroup_limit(const struct cmd_struct *cmd, int argc, char **argv)
> ret = ioctl(fd, BTRFS_IOC_QGROUP_LIMIT, &args);
> close_file_or_dir(fd, dirstream);
> if (ret < 0) {
> - error("unable to limit requested quota group: %m");
> + error("unable to limit requested quota group: %s",
> + errno == ENOTCONN ? "quota not enabled"
> + : strerror(errno));
> +
> return 1;
> }
> return 0;
>
Attachment:
signature.asc
Description: OpenPGP digital signature
