Make the netfs_io_request::subreq_counter, used to generate values for
netfs_io_subrequest::debug_index, into an atomic_t so that it can be called
from the retry thread at the same time as the app thread issuing writes.

Signed-off-by: David Howells <dhowe...@redhat.com>
Reviewed-by: Jeff Layton <jlay...@kernel.org>
cc: ne...@lists.linux.dev
cc: linux-fsde...@vger.kernel.org
---
 fs/netfs/output.c     | 2 +-
 include/linux/netfs.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/netfs/output.c b/fs/netfs/output.c
index 625eb68f3e5a..fbdbb4f78234 100644
--- a/fs/netfs/output.c
+++ b/fs/netfs/output.c
@@ -37,7 +37,7 @@ struct netfs_io_subrequest *netfs_create_write_request(struct 
netfs_io_request *
                subreq->source  = dest;
                subreq->start   = start;
                subreq->len     = len;
-               subreq->debug_index = wreq->subreq_counter++;
+               subreq->debug_index = atomic_inc_return(&wreq->subreq_counter);
 
                switch (subreq->source) {
                case NETFS_UPLOAD_TO_SERVER:
diff --git a/include/linux/netfs.h b/include/linux/netfs.h
index f36a6d8163d1..ddafc6ebff42 100644
--- a/include/linux/netfs.h
+++ b/include/linux/netfs.h
@@ -202,7 +202,7 @@ struct netfs_io_request {
        unsigned int            debug_id;
        unsigned int            rsize;          /* Maximum read size (0 for 
none) */
        unsigned int            wsize;          /* Maximum write size (0 for 
none) */
-       unsigned int            subreq_counter; /* Next subreq->debug_index */
+       atomic_t                subreq_counter; /* Next subreq->debug_index */
        atomic_t                nr_outstanding; /* Number of ops in progress */
        atomic_t                nr_copy_ops;    /* Number of copy-to-cache ops 
in progress */
        size_t                  submitted;      /* Amount submitted for I/O so 
far */

Reply via email to