All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/2] Add support for using liburing xattr
@ 2021-11-29 22:15 Stefan Roesch
  2021-11-29 22:15 ` [PATCH v1 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
  2021-11-29 22:15 ` [PATCH v1 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
  0 siblings, 2 replies; 5+ messages in thread
From: Stefan Roesch @ 2021-11-29 22:15 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


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

 ltp/fsstress.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 88 insertions(+), 3 deletions(-)


Signed-off-by: Stefan Roesch <shr@fb.com>
base-commit: 2050356437e3576673ec5ead79ad72eb619f0d72
-- 
2.30.2


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

* [PATCH v1 1/2] fstress: add suport for using liburing setxattr
  2021-11-29 22:15 [PATCH v1 0/2] Add support for using liburing xattr Stefan Roesch
@ 2021-11-29 22:15 ` Stefan Roesch
  2021-11-30 20:33   ` Dave Chinner
  2021-11-29 22:15 ` [PATCH v1 2/2] fstress: add suport for using liburing getxattr Stefan Roesch
  1 sibling, 1 reply; 5+ messages in thread
From: Stefan Roesch @ 2021-11-29 22:15 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 | 43 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 003e0e49..4a5c4afe 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -4779,6 +4779,43 @@ 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)
 {
@@ -4842,7 +4879,11 @@ setfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
+	if (have_io_uring)
+		e = io_uring_setxattr(f.path, name, value, value_len, flag);
+	else
+		e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
+
 	if (e == 0)
 		fep->xattr_counter++;
 	if (v)
-- 
2.30.2


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

* [PATCH v1 2/2] fstress: add suport for using liburing getxattr
  2021-11-29 22:15 [PATCH v1 0/2] Add support for using liburing xattr Stefan Roesch
  2021-11-29 22:15 ` [PATCH v1 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
@ 2021-11-29 22:15 ` Stefan Roesch
  1 sibling, 0 replies; 5+ messages in thread
From: Stefan Roesch @ 2021-11-29 22:15 UTC (permalink / raw)
  To: fstests, kernel-team; +Cc: shr

Summary:

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 | 48 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/ltp/fsstress.c b/ltp/fsstress.c
index 4a5c4afe..df7820d6 100644
--- a/ltp/fsstress.c
+++ b/ltp/fsstress.c
@@ -3895,6 +3895,42 @@ getdents_f(opnum_t opno, long r)
 	closedir(dir);
 }
 
+static int
+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;
+}
+
 void
 getfattr_f(opnum_t opno, long r)
 {
@@ -3932,7 +3968,11 @@ getfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	value_len = getxattr(f.path, name, NULL, 0);
+	if (have_io_uring)
+        	value_len = io_uring_getxattr(f.path, name, NULL, 0);
+    	else
+        	value_len = getxattr(f.path, name, NULL, 0);
+
 	if (value_len < 0) {
 		if (v)
 			printf("%d/%lld: getfattr file %s name %s failed %d\n",
@@ -3954,7 +3994,11 @@ getfattr_f(opnum_t opno, long r)
 		goto out;
 	}
 
-	e = getxattr(f.path, name, value, value_len) < 0 ? errno : 0;
+	if (have_io_uring)
+		e = io_uring_getxattr(f.path, name, value, value_len);
+	else
+		e = getxattr(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",
-- 
2.30.2


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

* Re: [PATCH v1 1/2] fstress: add suport for using liburing setxattr
  2021-11-29 22:15 ` [PATCH v1 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
@ 2021-11-30 20:33   ` Dave Chinner
  2021-12-01  5:54     ` Stefan Roesch
  0 siblings, 1 reply; 5+ messages in thread
From: Dave Chinner @ 2021-11-30 20:33 UTC (permalink / raw)
  To: Stefan Roesch; +Cc: fstests, kernel-team

On Mon, Nov 29, 2021 at 02:15:41PM -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 | 43 ++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 42 insertions(+), 1 deletion(-)
> 
> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
> index 003e0e49..4a5c4afe 100644
> --- a/ltp/fsstress.c
> +++ b/ltp/fsstress.c
> @@ -4779,6 +4779,43 @@ 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)
>  {
> @@ -4842,7 +4879,11 @@ setfattr_f(opnum_t opno, long r)
>  		goto out;
>  	}
>  
> -	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
> +	if (have_io_uring)
> +		e = io_uring_setxattr(f.path, name, value, value_len, flag);
> +	else
> +		e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;

While this is technically correct, it is architecturally wrong.
This replaces testing of the existing setxattr() syscall path on
systems that have io_uring enabled (which is most modern, upstream
test instances). That's a significant regression in test coverage,
especially given that most applications using xattrs do not use
io_uring...

The io_uring functionality should be added in the same way that
OP_URING_READ/OP_URING_WRITE were added. That is, new
operations were added in addition to the existing syscall based
OP_READ/OP_WRITE, OP_READV/OP_WRITEV and the AIO based versions
OP_AREAD/OP_AWRITE.

This way fsstress adds the io_uring mechanisms in addition to all
the normal syscall methods it already uses rather than replacing
them. This also allow io_uring operations to race with existing
syscall operations running the same operations on the same files
concurrently...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

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

* Re: [PATCH v1 1/2] fstress: add suport for using liburing setxattr
  2021-11-30 20:33   ` Dave Chinner
@ 2021-12-01  5:54     ` Stefan Roesch
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Roesch @ 2021-12-01  5:54 UTC (permalink / raw)
  To: Dave Chinner; +Cc: fstests, kernel-team



On 11/30/21 12:33 PM, Dave Chinner wrote:
> On Mon, Nov 29, 2021 at 02:15:41PM -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 | 43 ++++++++++++++++++++++++++++++++++++++++++-
>>  1 file changed, 42 insertions(+), 1 deletion(-)
>>
>> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
>> index 003e0e49..4a5c4afe 100644
>> --- a/ltp/fsstress.c
>> +++ b/ltp/fsstress.c
>> @@ -4779,6 +4779,43 @@ 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)
>>  {
>> @@ -4842,7 +4879,11 @@ setfattr_f(opnum_t opno, long r)
>>  		goto out;
>>  	}
>>  
>> -	e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
>> +	if (have_io_uring)
>> +		e = io_uring_setxattr(f.path, name, value, value_len, flag);
>> +	else
>> +		e = setxattr(f.path, name, value, value_len, flag) < 0 ? errno : 0;
> 
> While this is technically correct, it is architecturally wrong.
> This replaces testing of the existing setxattr() syscall path on
> systems that have io_uring enabled (which is most modern, upstream
> test instances). That's a significant regression in test coverage,
> especially given that most applications using xattrs do not use
> io_uring...
> 
> The io_uring functionality should be added in the same way that
> OP_URING_READ/OP_URING_WRITE were added. That is, new
> operations were added in addition to the existing syscall based
> OP_READ/OP_WRITE, OP_READV/OP_WRITEV and the AIO based versions
> OP_AREAD/OP_AWRITE.
> 
> This way fsstress adds the io_uring mechanisms in addition to all
> the normal syscall methods it already uses rather than replacing
> them. This also allow io_uring operations to race with existing
> syscall operations running the same operations on the same files
> concurrently...
> 

Dave, thanks for the review. I sent out an updated version (v2) of the patch series
that implements the changes as dedicated operations where the user can select what
type of operation is preferred.

> Cheers,
> 
> Dave.
> 

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

end of thread, other threads:[~2021-12-01  5:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-29 22:15 [PATCH v1 0/2] Add support for using liburing xattr Stefan Roesch
2021-11-29 22:15 ` [PATCH v1 1/2] fstress: add suport for using liburing setxattr Stefan Roesch
2021-11-30 20:33   ` Dave Chinner
2021-12-01  5:54     ` Stefan Roesch
2021-11-29 22:15 ` [PATCH v1 2/2] fstress: add suport for using liburing getxattr 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.