netfs: Make netfs_io_request::subreq_counter an atomic_t
authorDavid Howells <dhowells@redhat.com>
Mon, 18 Mar 2024 17:15:57 +0000 (17:15 +0000)
committerDavid Howells <dhowells@redhat.com>
Mon, 29 Apr 2024 14:01:43 +0000 (15:01 +0100)
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 <dhowells@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org

fs/netfs/output.c
include/linux/netfs.h

index 625eb68f3e5ad50f89848e197ac011cae515fe56..fbdbb4f78234262bb1100f0de1b812421fd86461 100644 (file)
@@ -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:
index f36a6d8163d152859b317a1eb956583a176529f1..ddafc6ebff42f136ebd764094222c86d0d821c7a 100644 (file)
@@ -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 */