All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Add support for using liburing xattr
@ 2021-12-01  5:52 Stefan Roesch
  2021-12-01  5:52 ` [PATCH v2 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Stefan Roesch @ 2021-12-01  5:52 UTC (permalink / raw)
  To: fstests, kernel-team; +Cc: shr

This adds support for using the xattr implementation in liburing.

Patch 1: fstress: add suport for using liburing setxattr
  Uses the liburing setxattr implementation in fsstress.

Patch 2: fstress: add suport for using liburing getxattr
  Uses the liburing getxattr implementation in fsstress.

There are two additional patch series related to this:
- io_uring: add xattr support
- liburing: add xattr support


Signed-off-by: Stefan Roesch <shr@fb.com>
base-commit: 2050356437e3576673ec5ead79ad72eb619f0d72
---
V2: - Introduce dedicated functions for uring getxattr and
      uring setxattr, so they are not automatically linked
      in if liburing is available.


Stefan Roesch (2):
  fstress: add suport for using liburing setxattr
  fstress: add suport for using liburing getxattr

 ltp/fsstress.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 116 insertions(+), 6 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/2] fstress: add suport for using liburing setxattr
  2021-12-01  5:52 [PATCH v2 0/2] Add support for using liburing xattr Stefan Roesch
@ 2021-12-01  5:52 ` Stefan Roesch
  2021-12-16  7:30   ` Zorro Lang
  2021-12-01  5:52 ` [PATCH v2 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
  2021-12-12 15:17 ` [PATCH v2 0/2] Add support for using liburing xattr Eryu Guan
  2 siblings, 1 reply; 9+ messages in thread
From: Stefan Roesch @ 2021-12-01  5:52 UTC (permalink / raw)
  To: fstests, kernel-team; +Cc: shr

Summary:

Liburing added support for setxattr. This change adds
support for this this in fsstress when fsstress is built
with liburing support.

Signed-off-by: Stefan Roesch <shr@fb.com>
---
 ltp/fsstress.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 57 insertions(+), 2 deletions(-)

diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 003e0e49..aba7c6f7 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -145,12 +145,14 @@ typedef enum {
 	OP_URING_WRITE,
 	OP_WRITE,
 	OP_WRITEV,
+	OP_URING_SETXATTR,
 	OP_LAST
 } opty_t;
 
 typedef long long opnum_t;
 
 typedef void (*opfnc_t)(opnum_t, long);
+typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
 
 typedef struct opdesc {
 	opty_t	op;
@@ -277,6 +279,7 @@ void	uring_read_f(opnum_t, long);
 void	uring_write_f(opnum_t, long);
 void	write_f(opnum_t, long);
 void	writev_f(opnum_t, long);
+void	uring_setxattr_f(opnum_t, long);
 char	*xattr_flag_to_string(int);
 
 opdesc_t	ops[] = {
@@ -347,6 +350,7 @@ opdesc_t	ops[] = {
 	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
 	{ OP_WRITE, "write", write_f, 4, 1 },
 	{ OP_WRITEV, "writev", writev_f, 4, 1 },
+	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },
 }, *ops_end;
 
 flist_t	flist[FT_nft] = {
@@ -4779,8 +4783,45 @@ setattr_f(opnum_t opno, long r)
 	close(fd);
 }
 
+static int
+io_uring_setxattr(const char *path, const char *name, const void *value, size_t size,
+	  	 int flags)
+{
+	struct io_uring_sqe *sqe;
+	struct io_uring_cqe *cqe;
+	int ret;
+
+	sqe = io_uring_get_sqe(&ring);
+	if (!sqe) {
+		printf("io_uring_get_sqe failed\n");
+		ret = -1;
+		goto out;
+	}
+
+	io_uring_prep_setxattr(sqe, name, value, path, flags, size);
+
+	ret = io_uring_submit_and_wait(&ring, 1);
+	if (ret != 1) {
+		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
+		ret = -1;
+		goto out;
+    	}
+
+	ret = io_uring_wait_cqe(&ring, &cqe);
+	if (ret < 0) {
+		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
+		goto out;
+	}
+
+	ret = cqe->res;
+	io_uring_cqe_seen(&ring, cqe);
+
+out:
+	return ret;
+}
+
 void
-setfattr_f(opnum_t opno, long r)
+setfattr_f_cbk(opnum_t opno, long r, setxattr_cbk cbk)
 {
 	int		e;
 	pathname_t	f;
@@ -4842,7 +4883,7 @@ setfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
+	e = cbk(f.path, name, value, value_len, flag) < 0 ? errno : 0;
 	if (e == 0)
 		fep->xattr_counter++;
 	if (v)
@@ -4854,6 +4895,20 @@ out:
 	free_pathname(&f);
 }
 
+void
+uring_setxattr_f(opnum_t opno, long r)
+{
+#ifdef URING
+	setfattr_f_cbk(opno, r, io_uring_setxattr);
+#endif
+}
+
+void
+setfattr_f(opnum_t opno, long r)
+{
+	setfattr_f_cbk(opno, r, setxattr);
+}
+
 void
 snapshot_f(opnum_t opno, long r)
 {
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/2] fstress: add suport for using liburing getxattr
  2021-12-01  5:52 [PATCH v2 0/2] Add support for using liburing xattr Stefan Roesch
  2021-12-01  5:52 ` [PATCH v2 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
@ 2021-12-01  5:52 ` Stefan Roesch
  2021-12-12 15:10   ` Eryu Guan
  2021-12-12 15:17 ` [PATCH v2 0/2] Add support for using liburing xattr Eryu Guan
  2 siblings, 1 reply; 9+ messages in thread
From: Stefan Roesch @ 2021-12-01  5:52 UTC (permalink / raw)
  To: fstests, kernel-team; +Cc: shr

Liburing added support for getxattr. This change adds
support for this this in fsstress when fsstress is built
with liburing support.

Signed-off-by: Stefan Roesch <shr@fb.com>
---
 ltp/fsstress.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 59 insertions(+), 4 deletions(-)

diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index aba7c6f7..5a18701a 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -145,6 +145,7 @@ typedef enum {
 	OP_URING_WRITE,
 	OP_WRITE,
 	OP_WRITEV,
+	OP_URING_GETXATTR,
 	OP_URING_SETXATTR,
 	OP_LAST
 } opty_t;
@@ -152,6 +153,7 @@ typedef enum {
 typedef long long opnum_t;
 
 typedef void (*opfnc_t)(opnum_t, long);
+typedef ssize_t (*getxattr_cbk)(const char *, const char *, void *, size_t);
 typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
 
 typedef struct opdesc {
@@ -279,6 +281,7 @@ void	uring_read_f(opnum_t, long);
 void	uring_write_f(opnum_t, long);
 void	write_f(opnum_t, long);
 void	writev_f(opnum_t, long);
+void	uring_getxattr_f(opnum_t, long);
 void	uring_setxattr_f(opnum_t, long);
 char	*xattr_flag_to_string(int);
 
@@ -350,6 +353,7 @@ opdesc_t	ops[] = {
 	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
 	{ OP_WRITE, "write", write_f, 4, 1 },
 	{ OP_WRITEV, "writev", writev_f, 4, 1 },
+	{ OP_URING_GETXATTR, "uring_getxattr", uring_getxattr_f, 1, 0 },
 	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },
 }, *ops_end;
 
@@ -3899,8 +3903,44 @@ getdents_f(opnum_t opno, long r)
 	closedir(dir);
 }
 
-void
-getfattr_f(opnum_t opno, long r)
+static ssize_t
+io_uring_getxattr(const char *path, const char *name, void *value, size_t size)
+{
+	struct io_uring_sqe *sqe;
+	struct io_uring_cqe *cqe;
+	int ret;
+
+	sqe = io_uring_get_sqe(&ring);
+	if (!sqe) {
+		printf("io_uring_get_sqe failed\n");
+		ret = -1;
+		goto out;
+	}
+
+	io_uring_prep_getxattr(sqe, name, value, path, size);
+
+	ret = io_uring_submit_and_wait(&ring, 1);
+	if (ret != 1) {
+		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
+		ret = -1;
+		goto out;
+    	}
+
+	ret = io_uring_wait_cqe(&ring, &cqe);
+	if (ret < 0) {
+		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
+		goto out;
+	}
+
+	ret = cqe->res;
+	io_uring_cqe_seen(&ring, cqe);
+
+out:
+	return ret;
+}
+
+static void
+getfattr_f_cbk(opnum_t opno, long r, getxattr_cbk cbk)
 {
 	fent_t	        *fep;
 	int		e;
@@ -3936,7 +3976,7 @@ getfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	value_len = getxattr(f.path, name, NULL, 0);
+        value_len = cbk(f.path, name, NULL, 0);
 	if (value_len < 0) {
 		if (v)
 			printf("%d/%lld: getfattr file %s name %s failed %d\n",
@@ -3958,7 +3998,8 @@ getfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	e = getxattr(f.path, name, value, value_len) < 0 ? errno : 0;
+	e = cbk(f.path, name, value, value_len) < 0 ? errno : 0;
+
 out_log:
 	if (v)
 		printf("%d/%lld: getfattr file %s name %s value length %d %d\n",
@@ -3968,6 +4009,20 @@ out:
 	free_pathname(&f);
 }
 
+void
+uring_getxattr_f(opnum_t opno, long r)
+{
+#ifdef URING
+	getfattr_f_cbk(opno, r, io_uring_getxattr);
+#endif
+}
+
+void
+getfattr_f(opnum_t opno, long r)
+{
+	getfattr_f_cbk(opno, r, getxattr);
+}
+
 void
 link_f(opnum_t opno, long r)
 {
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/2] fstress: add suport for using liburing getxattr
  2021-12-01  5:52 ` [PATCH v2 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
@ 2021-12-12 15:10   ` Eryu Guan
  2021-12-16 18:43     ` Stefan Roesch
  0 siblings, 1 reply; 9+ messages in thread
From: Eryu Guan @ 2021-12-12 15:10 UTC (permalink / raw)
  To: Stefan Roesch; +Cc: fstests, kernel-team

On Tue, Nov 30, 2021 at 09:52:02PM -0800, Stefan Roesch wrote:
> Liburing added support for getxattr. This change adds
> support for this this in fsstress when fsstress is built
> with liburing support.
> 
> Signed-off-by: Stefan Roesch <shr@fb.com>
> ---
>  ltp/fsstress.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 59 insertions(+), 4 deletions(-)
> 
> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
> index aba7c6f7..5a18701a 100644
> --- a/ltp/fsstress.c
> +++ b/ltp/fsstress.c
> @@ -145,6 +145,7 @@ typedef enum {
>  	OP_URING_WRITE,
>  	OP_WRITE,
>  	OP_WRITEV,
> +	OP_URING_GETXATTR,
>  	OP_URING_SETXATTR,
>  	OP_LAST
>  } opty_t;
> @@ -152,6 +153,7 @@ typedef enum {
>  typedef long long opnum_t;
>  
>  typedef void (*opfnc_t)(opnum_t, long);
> +typedef ssize_t (*getxattr_cbk)(const char *, const char *, void *, size_t);
>  typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
>  
>  typedef struct opdesc {
> @@ -279,6 +281,7 @@ void	uring_read_f(opnum_t, long);
>  void	uring_write_f(opnum_t, long);
>  void	write_f(opnum_t, long);
>  void	writev_f(opnum_t, long);
> +void	uring_getxattr_f(opnum_t, long);
>  void	uring_setxattr_f(opnum_t, long);
>  char	*xattr_flag_to_string(int);
>  
> @@ -350,6 +353,7 @@ opdesc_t	ops[] = {
>  	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
>  	{ OP_WRITE, "write", write_f, 4, 1 },
>  	{ OP_WRITEV, "writev", writev_f, 4, 1 },
> +	{ OP_URING_GETXATTR, "uring_getxattr", uring_getxattr_f, 1, 0 },
>  	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },
>  }, *ops_end;
>  
> @@ -3899,8 +3903,44 @@ getdents_f(opnum_t opno, long r)
>  	closedir(dir);
>  }
>  
> -void
> -getfattr_f(opnum_t opno, long r)
> +static ssize_t
> +io_uring_getxattr(const char *path, const char *name, void *value, size_t size)
> +{
> +	struct io_uring_sqe *sqe;
> +	struct io_uring_cqe *cqe;
> +	int ret;
> +
> +	sqe = io_uring_get_sqe(&ring);
> +	if (!sqe) {
> +		printf("io_uring_get_sqe failed\n");
> +		ret = -1;
> +		goto out;
> +	}
> +
> +	io_uring_prep_getxattr(sqe, name, value, path, size);
> +
> +	ret = io_uring_submit_and_wait(&ring, 1);
> +	if (ret != 1) {
> +		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
> +		ret = -1;
> +		goto out;
> +    	}
> +
> +	ret = io_uring_wait_cqe(&ring, &cqe);
> +	if (ret < 0) {
> +		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
> +		goto out;
> +	}
> +
> +	ret = cqe->res;
> +	io_uring_cqe_seen(&ring, cqe);
> +
> +out:
> +	return ret;
> +}
> +
> +static void
> +getfattr_f_cbk(opnum_t opno, long r, getxattr_cbk cbk)
>  {
>  	fent_t	        *fep;
>  	int		e;
> @@ -3936,7 +3976,7 @@ getfattr_f(opnum_t opno, long r)
>  		goto out;
>  	}
>  
> -	value_len = getxattr(f.path, name, NULL, 0);
> +        value_len = cbk(f.path, name, NULL, 0);

Use tab for indention here.

Thanks,
Eryu

>  	if (value_len < 0) {
>  		if (v)
>  			printf("%d/%lld: getfattr file %s name %s failed %d\n",
> @@ -3958,7 +3998,8 @@ getfattr_f(opnum_t opno, long r)
>  		goto out;
>  	}
>  
> -	e = getxattr(f.path, name, value, value_len) < 0 ? errno : 0;
> +	e = cbk(f.path, name, value, value_len) < 0 ? errno : 0;
> +
>  out_log:
>  	if (v)
>  		printf("%d/%lld: getfattr file %s name %s value length %d %d\n",
> @@ -3968,6 +4009,20 @@ out:
>  	free_pathname(&f);
>  }
>  
> +void
> +uring_getxattr_f(opnum_t opno, long r)
> +{
> +#ifdef URING
> +	getfattr_f_cbk(opno, r, io_uring_getxattr);
> +#endif
> +}
> +
> +void
> +getfattr_f(opnum_t opno, long r)
> +{
> +	getfattr_f_cbk(opno, r, getxattr);
> +}
> +
>  void
>  link_f(opnum_t opno, long r)
>  {
> -- 
> 2.30.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] Add support for using liburing xattr
  2021-12-01  5:52 [PATCH v2 0/2] Add support for using liburing xattr Stefan Roesch
  2021-12-01  5:52 ` [PATCH v2 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
  2021-12-01  5:52 ` [PATCH v2 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
@ 2021-12-12 15:17 ` Eryu Guan
  2021-12-16 18:48   ` Stefan Roesch
  2 siblings, 1 reply; 9+ messages in thread
From: Eryu Guan @ 2021-12-12 15:17 UTC (permalink / raw)
  To: Stefan Roesch; +Cc: fstests, kernel-team

On Tue, Nov 30, 2021 at 09:52:00PM -0800, Stefan Roesch wrote:
> This adds support for using the xattr implementation in liburing.
> 
> Patch 1: fstress: add suport for using liburing setxattr
>   Uses the liburing setxattr implementation in fsstress.
> 
> Patch 2: fstress: add suport for using liburing getxattr
>   Uses the liburing getxattr implementation in fsstress.
> 
> There are two additional patch series related to this:
> - io_uring: add xattr support
> - liburing: add xattr support

Patches look fine to me overall, just one minor issue in patch 2.

But I'd like to firstly make sure the above patches for kernel and
liburing will be accepted, so we don't merge tests for features that are
never upstreamed. They don't have to be actually upstreamed, as long as
the maintainers don't reject the new features.

And fsstress.c has been updated, would you please rebase & resend by
then?

Thanks,
Eryu

> 
> 
> Signed-off-by: Stefan Roesch <shr@fb.com>
> base-commit: 2050356437e3576673ec5ead79ad72eb619f0d72
> ---
> V2: - Introduce dedicated functions for uring getxattr and
>       uring setxattr, so they are not automatically linked
>       in if liburing is available.
> 
> 
> Stefan Roesch (2):
>   fstress: add suport for using liburing setxattr
>   fstress: add suport for using liburing getxattr
> 
>  ltp/fsstress.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 116 insertions(+), 6 deletions(-)
> 
> -- 
> 2.30.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/2] fstress: add suport for using liburing setxattr
  2021-12-01  5:52 ` [PATCH v2 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
@ 2021-12-16  7:30   ` Zorro Lang
  2021-12-16 17:28     ` Stefan Roesch
  0 siblings, 1 reply; 9+ messages in thread
From: Zorro Lang @ 2021-12-16  7:30 UTC (permalink / raw)
  To: Stefan Roesch; +Cc: fstests, kernel-team

On Tue, Nov 30, 2021 at 09:52:01PM -0800, Stefan Roesch wrote:
> Summary:
> 
> Liburing added support for setxattr. This change adds
> support for this this in fsstress when fsstress is built
> with liburing support.
> 
> Signed-off-by: Stefan Roesch <shr@fb.com>
> ---
>  ltp/fsstress.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 57 insertions(+), 2 deletions(-)
> 
> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
> index 003e0e49..aba7c6f7 100644
> --- a/ltp/fsstress.c
> +++ b/ltp/fsstress.c
> @@ -145,12 +145,14 @@ typedef enum {
>  	OP_URING_WRITE,
>  	OP_WRITE,
>  	OP_WRITEV,
> +	OP_URING_SETXATTR,
>  	OP_LAST
>  } opty_t;
>  
>  typedef long long opnum_t;
>  
>  typedef void (*opfnc_t)(opnum_t, long);
> +typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
>  
>  typedef struct opdesc {
>  	opty_t	op;
> @@ -277,6 +279,7 @@ void	uring_read_f(opnum_t, long);
>  void	uring_write_f(opnum_t, long);
>  void	write_f(opnum_t, long);
>  void	writev_f(opnum_t, long);
> +void	uring_setxattr_f(opnum_t, long);
>  char	*xattr_flag_to_string(int);
>  
>  opdesc_t	ops[] = {
> @@ -347,6 +350,7 @@ opdesc_t	ops[] = {
>  	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
>  	{ OP_WRITE, "write", write_f, 4, 1 },
>  	{ OP_WRITEV, "writev", writev_f, 4, 1 },
> +	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },

Due to 160a3b4b4477 "(fsstress: consistently index the ops array by OP_ type)" has been
merged, so this patchset might need to rebase on that.

Thanks,
Zorro

>  }, *ops_end;
>  
>  flist_t	flist[FT_nft] = {
> @@ -4779,8 +4783,45 @@ setattr_f(opnum_t opno, long r)
>  	close(fd);
>  }
>  
> +static int
> +io_uring_setxattr(const char *path, const char *name, const void *value, size_t size,
> +	  	 int flags)
> +{
> +	struct io_uring_sqe *sqe;
> +	struct io_uring_cqe *cqe;
> +	int ret;
> +
> +	sqe = io_uring_get_sqe(&ring);
> +	if (!sqe) {
> +		printf("io_uring_get_sqe failed\n");
> +		ret = -1;
> +		goto out;
> +	}
> +
> +	io_uring_prep_setxattr(sqe, name, value, path, flags, size);
> +
> +	ret = io_uring_submit_and_wait(&ring, 1);
> +	if (ret != 1) {
> +		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
> +		ret = -1;
> +		goto out;
> +    	}
> +
> +	ret = io_uring_wait_cqe(&ring, &cqe);
> +	if (ret < 0) {
> +		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
> +		goto out;
> +	}
> +
> +	ret = cqe->res;
> +	io_uring_cqe_seen(&ring, cqe);
> +
> +out:
> +	return ret;
> +}
> +
>  void
> -setfattr_f(opnum_t opno, long r)
> +setfattr_f_cbk(opnum_t opno, long r, setxattr_cbk cbk)
>  {
>  	int		e;
>  	pathname_t	f;
> @@ -4842,7 +4883,7 @@ setfattr_f(opnum_t opno, long r)
>  		goto out;
>  	}
>  
> -	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
> +	e = cbk(f.path, name, value, value_len, flag) < 0 ? errno : 0;
>  	if (e == 0)
>  		fep->xattr_counter++;
>  	if (v)
> @@ -4854,6 +4895,20 @@ out:
>  	free_pathname(&f);
>  }
>  
> +void
> +uring_setxattr_f(opnum_t opno, long r)
> +{
> +#ifdef URING
> +	setfattr_f_cbk(opno, r, io_uring_setxattr);
> +#endif
> +}
> +
> +void
> +setfattr_f(opnum_t opno, long r)
> +{
> +	setfattr_f_cbk(opno, r, setxattr);
> +}
> +
>  void
>  snapshot_f(opnum_t opno, long r)
>  {
> -- 
> 2.30.2
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/2] fstress: add suport for using liburing setxattr
  2021-12-16  7:30   ` Zorro Lang
@ 2021-12-16 17:28     ` Stefan Roesch
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Roesch @ 2021-12-16 17:28 UTC (permalink / raw)
  To: fstests, kernel-team



On 12/15/21 11:30 PM, Zorro Lang wrote:
> On Tue, Nov 30, 2021 at 09:52:01PM -0800, Stefan Roesch wrote:
>> Summary:
>>
>> Liburing added support for setxattr. This change adds
>> support for this this in fsstress when fsstress is built
>> with liburing support.
>>
>> Signed-off-by: Stefan Roesch <shr@fb.com>
>> ---
>>  ltp/fsstress.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++--
>>  1 file changed, 57 insertions(+), 2 deletions(-)
>>
>> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
>> index 003e0e49..aba7c6f7 100644
>> --- a/ltp/fsstress.c
>> +++ b/ltp/fsstress.c
>> @@ -145,12 +145,14 @@ typedef enum {
>>  	OP_URING_WRITE,
>>  	OP_WRITE,
>>  	OP_WRITEV,
>> +	OP_URING_SETXATTR,
>>  	OP_LAST
>>  } opty_t;
>>  
>>  typedef long long opnum_t;
>>  
>>  typedef void (*opfnc_t)(opnum_t, long);
>> +typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
>>  
>>  typedef struct opdesc {
>>  	opty_t	op;
>> @@ -277,6 +279,7 @@ void	uring_read_f(opnum_t, long);
>>  void	uring_write_f(opnum_t, long);
>>  void	write_f(opnum_t, long);
>>  void	writev_f(opnum_t, long);
>> +void	uring_setxattr_f(opnum_t, long);
>>  char	*xattr_flag_to_string(int);
>>  
>>  opdesc_t	ops[] = {
>> @@ -347,6 +350,7 @@ opdesc_t	ops[] = {
>>  	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
>>  	{ OP_WRITE, "write", write_f, 4, 1 },
>>  	{ OP_WRITEV, "writev", writev_f, 4, 1 },
>> +	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },
> 
> Due to 160a3b4b4477 "(fsstress: consistently index the ops array by OP_ type)" has been
> merged, so this patchset might need to rebase on that.
> 
> Thanks,
> Zorro
> 

Zorro, thanks for notifying me. I rebased and sent out a new patch version.

>>  }, *ops_end;
>>  
>>  flist_t	flist[FT_nft] = {
>> @@ -4779,8 +4783,45 @@ setattr_f(opnum_t opno, long r)
>>  	close(fd);
>>  }
>>  
>> +static int
>> +io_uring_setxattr(const char *path, const char *name, const void *value, size_t size,
>> +	  	 int flags)
>> +{
>> +	struct io_uring_sqe *sqe;
>> +	struct io_uring_cqe *cqe;
>> +	int ret;
>> +
>> +	sqe = io_uring_get_sqe(&ring);
>> +	if (!sqe) {
>> +		printf("io_uring_get_sqe failed\n");
>> +		ret = -1;
>> +		goto out;
>> +	}
>> +
>> +	io_uring_prep_setxattr(sqe, name, value, path, flags, size);
>> +
>> +	ret = io_uring_submit_and_wait(&ring, 1);
>> +	if (ret != 1) {
>> +		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
>> +		ret = -1;
>> +		goto out;
>> +    	}
>> +
>> +	ret = io_uring_wait_cqe(&ring, &cqe);
>> +	if (ret < 0) {
>> +		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
>> +		goto out;
>> +	}
>> +
>> +	ret = cqe->res;
>> +	io_uring_cqe_seen(&ring, cqe);
>> +
>> +out:
>> +	return ret;
>> +}
>> +
>>  void
>> -setfattr_f(opnum_t opno, long r)
>> +setfattr_f_cbk(opnum_t opno, long r, setxattr_cbk cbk)
>>  {
>>  	int		e;
>>  	pathname_t	f;
>> @@ -4842,7 +4883,7 @@ setfattr_f(opnum_t opno, long r)
>>  		goto out;
>>  	}
>>  
>> -	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
>> +	e = cbk(f.path, name, value, value_len, flag) < 0 ? errno : 0;
>>  	if (e == 0)
>>  		fep->xattr_counter++;
>>  	if (v)
>> @@ -4854,6 +4895,20 @@ out:
>>  	free_pathname(&f);
>>  }
>>  
>> +void
>> +uring_setxattr_f(opnum_t opno, long r)
>> +{
>> +#ifdef URING
>> +	setfattr_f_cbk(opno, r, io_uring_setxattr);
>> +#endif
>> +}
>> +
>> +void
>> +setfattr_f(opnum_t opno, long r)
>> +{
>> +	setfattr_f_cbk(opno, r, setxattr);
>> +}
>> +
>>  void
>>  snapshot_f(opnum_t opno, long r)
>>  {
>> -- 
>> 2.30.2
>>
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/2] fstress: add suport for using liburing getxattr
  2021-12-12 15:10   ` Eryu Guan
@ 2021-12-16 18:43     ` Stefan Roesch
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Roesch @ 2021-12-16 18:43 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, kernel-team



On 12/12/21 7:10 AM, Eryu Guan wrote:
> On Tue, Nov 30, 2021 at 09:52:02PM -0800, Stefan Roesch wrote:
>> Liburing added support for getxattr. This change adds
>> support for this this in fsstress when fsstress is built
>> with liburing support.
>>
>> Signed-off-by: Stefan Roesch <shr@fb.com>
>> ---
>>  ltp/fsstress.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++----
>>  1 file changed, 59 insertions(+), 4 deletions(-)
>>
>> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
>> index aba7c6f7..5a18701a 100644
>> --- a/ltp/fsstress.c
>> +++ b/ltp/fsstress.c
>> @@ -145,6 +145,7 @@ typedef enum {
>>  	OP_URING_WRITE,
>>  	OP_WRITE,
>>  	OP_WRITEV,
>> +	OP_URING_GETXATTR,
>>  	OP_URING_SETXATTR,
>>  	OP_LAST
>>  } opty_t;
>> @@ -152,6 +153,7 @@ typedef enum {
>>  typedef long long opnum_t;
>>  
>>  typedef void (*opfnc_t)(opnum_t, long);
>> +typedef ssize_t (*getxattr_cbk)(const char *, const char *, void *, size_t);
>>  typedef int (*setxattr_cbk)(const char *, const char *, const void *, size_t, int);
>>  
>>  typedef struct opdesc {
>> @@ -279,6 +281,7 @@ void	uring_read_f(opnum_t, long);
>>  void	uring_write_f(opnum_t, long);
>>  void	write_f(opnum_t, long);
>>  void	writev_f(opnum_t, long);
>> +void	uring_getxattr_f(opnum_t, long);
>>  void	uring_setxattr_f(opnum_t, long);
>>  char	*xattr_flag_to_string(int);
>>  
>> @@ -350,6 +353,7 @@ opdesc_t	ops[] = {
>>  	{ OP_URING_WRITE, "uring_write", uring_write_f, 1, 1 },
>>  	{ OP_WRITE, "write", write_f, 4, 1 },
>>  	{ OP_WRITEV, "writev", writev_f, 4, 1 },
>> +	{ OP_URING_GETXATTR, "uring_getxattr", uring_getxattr_f, 1, 0 },
>>  	{ OP_URING_SETXATTR, "uring_setxattr", uring_setxattr_f, 1, 1 },
>>  }, *ops_end;
>>  
>> @@ -3899,8 +3903,44 @@ getdents_f(opnum_t opno, long r)
>>  	closedir(dir);
>>  }
>>  
>> -void
>> -getfattr_f(opnum_t opno, long r)
>> +static ssize_t
>> +io_uring_getxattr(const char *path, const char *name, void *value, size_t size)
>> +{
>> +	struct io_uring_sqe *sqe;
>> +	struct io_uring_cqe *cqe;
>> +	int ret;
>> +
>> +	sqe = io_uring_get_sqe(&ring);
>> +	if (!sqe) {
>> +		printf("io_uring_get_sqe failed\n");
>> +		ret = -1;
>> +		goto out;
>> +	}
>> +
>> +	io_uring_prep_getxattr(sqe, name, value, path, size);
>> +
>> +	ret = io_uring_submit_and_wait(&ring, 1);
>> +	if (ret != 1) {
>> +		printf("io_uring_submit_and_wait failed, ret=%d\n", ret);
>> +		ret = -1;
>> +		goto out;
>> +    	}
>> +
>> +	ret = io_uring_wait_cqe(&ring, &cqe);
>> +	if (ret < 0) {
>> +		printf("io_uring_wait_cqe failed, ret=%d\n", ret);
>> +		goto out;
>> +	}
>> +
>> +	ret = cqe->res;
>> +	io_uring_cqe_seen(&ring, cqe);
>> +
>> +out:
>> +	return ret;
>> +}
>> +
>> +static void
>> +getfattr_f_cbk(opnum_t opno, long r, getxattr_cbk cbk)
>>  {
>>  	fent_t	        *fep;
>>  	int		e;
>> @@ -3936,7 +3976,7 @@ getfattr_f(opnum_t opno, long r)
>>  		goto out;
>>  	}
>>  
>> -	value_len = getxattr(f.path, name, NULL, 0);
>> +        value_len = cbk(f.path, name, NULL, 0);
> 
> Use tab for indention here.
> 
> Thanks,
> Eryu
> 

Fixed with v4.

>>  	if (value_len < 0) {
>>  		if (v)
>>  			printf("%d/%lld: getfattr file %s name %s failed %d\n",
>> @@ -3958,7 +3998,8 @@ getfattr_f(opnum_t opno, long r)
>>  		goto out;
>>  	}
>>  
>> -	e = getxattr(f.path, name, value, value_len) < 0 ? errno : 0;
>> +	e = cbk(f.path, name, value, value_len) < 0 ? errno : 0;
>> +
>>  out_log:
>>  	if (v)
>>  		printf("%d/%lld: getfattr file %s name %s value length %d %d\n",
>> @@ -3968,6 +4009,20 @@ out:
>>  	free_pathname(&f);
>>  }
>>  
>> +void
>> +uring_getxattr_f(opnum_t opno, long r)
>> +{
>> +#ifdef URING
>> +	getfattr_f_cbk(opno, r, io_uring_getxattr);
>> +#endif
>> +}
>> +
>> +void
>> +getfattr_f(opnum_t opno, long r)
>> +{
>> +	getfattr_f_cbk(opno, r, getxattr);
>> +}
>> +
>>  void
>>  link_f(opnum_t opno, long r)
>>  {
>> -- 
>> 2.30.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] Add support for using liburing xattr
  2021-12-12 15:17 ` [PATCH v2 0/2] Add support for using liburing xattr Eryu Guan
@ 2021-12-16 18:48   ` Stefan Roesch
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Roesch @ 2021-12-16 18:48 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, kernel-team



On 12/12/21 7:17 AM, Eryu Guan wrote:
> On Tue, Nov 30, 2021 at 09:52:00PM -0800, Stefan Roesch wrote:
>> This adds support for using the xattr implementation in liburing.
>>
>> Patch 1: fstress: add suport for using liburing setxattr
>>   Uses the liburing setxattr implementation in fsstress.
>>
>> Patch 2: fstress: add suport for using liburing getxattr
>>   Uses the liburing getxattr implementation in fsstress.
>>
>> There are two additional patch series related to this:
>> - io_uring: add xattr support
>> - liburing: add xattr support
> 
> Patches look fine to me overall, just one minor issue in patch 2.
> 
> But I'd like to firstly make sure the above patches for kernel and
> liburing will be accepted, so we don't merge tests for features that are
> never upstreamed. They don't have to be actually upstreamed, as long as
> the maintainers don't reject the new features.
> 
> And fsstress.c has been updated, would you please rebase & resend by
> then?
> 

I fixed the tab issue and rebased to version 4.

> Thanks,
> Eryu
> 
>>
>>
>> Signed-off-by: Stefan Roesch <shr@fb.com>
>> base-commit: 2050356437e3576673ec5ead79ad72eb619f0d72
>> ---
>> V2: - Introduce dedicated functions for uring getxattr and
>>       uring setxattr, so they are not automatically linked
>>       in if liburing is available.
>>
>>
>> Stefan Roesch (2):
>>   fstress: add suport for using liburing setxattr
>>   fstress: add suport for using liburing getxattr
>>
>>  ltp/fsstress.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++---
>>  1 file changed, 116 insertions(+), 6 deletions(-)
>>
>> -- 
>> 2.30.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-12-16 18:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-01  5:52 [PATCH v2 0/2] Add support for using liburing xattr Stefan Roesch
2021-12-01  5:52 ` [PATCH v2 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
2021-12-16  7:30   ` Zorro Lang
2021-12-16 17:28     ` Stefan Roesch
2021-12-01  5:52 ` [PATCH v2 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
2021-12-12 15:10   ` Eryu Guan
2021-12-16 18:43     ` Stefan Roesch
2021-12-12 15:17 ` [PATCH v2 0/2] Add support for using liburing xattr Eryu Guan
2021-12-16 18:48   ` Stefan Roesch

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.