afs: Use op->nr_iterations=-1 to indicate to begin fileserver iteration
authorDavid Howells <dhowells@redhat.com>
Fri, 20 Oct 2023 15:04:52 +0000 (16:04 +0100)
committerDavid Howells <dhowells@redhat.com>
Sun, 24 Dec 2023 15:22:52 +0000 (15:22 +0000)
Set op->nr_iterations to -1 to indicate that we need to begin fileserver
iteration rather than setting error to SHRT_MAX.  This makes it easier to
eliminate the address cursor.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org

fs/afs/fs_operation.c
fs/afs/internal.h
fs/afs/rotate.c

index 7a3803ce3a22970786699436763bc0925144cfb9..3e31fae9a14994bf6074f9e824c5081567c12c6e 100644 (file)
@@ -41,7 +41,7 @@ struct afs_operation *afs_alloc_operation(struct key *key, struct afs_volume *vo
        op->cb_v_break  = volume->cb_v_break;
        op->debug_id    = atomic_inc_return(&afs_operation_debug_counter);
        op->error       = -EDESTADDRREQ;
-       op->ac.error    = SHRT_MAX;
+       op->nr_iterations = -1;
 
        _leave(" = [op=%08x]", op->debug_id);
        return op;
index 95bb37253cad88708d84ad7e6c7899706ff1f022..e43aef74c241ec78fc9220126866643acc0ef480 100644 (file)
@@ -859,7 +859,7 @@ struct afs_operation {
        struct afs_call         *call;
        unsigned long           untried;        /* Bitmask of untried servers */
        short                   index;          /* Current server */
-       unsigned short          nr_iterations;  /* Number of server iterations */
+       short                   nr_iterations;  /* Number of server iterations */
 
        unsigned int            flags;
 #define AFS_OPERATION_STOP             0x0001  /* Set to cease iteration */
index 0829933f4d9aae7fa7b34a70f83e8d43ab3ada47..4d2317a663856fe6e9780ddb17791c0ac79e6a82 100644 (file)
@@ -116,7 +116,10 @@ bool afs_select_fileserver(struct afs_operation *op)
        unsigned int rtt;
        int error = op->ac.error, i;
 
-       _enter("%lx[%d],%lx[%d],%d,%d",
+       op->nr_iterations++;
+
+       _enter("OP=%x+%x,%llx,%lx[%d],%lx[%d],%d,%d",
+              op->debug_id, op->nr_iterations, op->volume->vid,
               op->untried, op->index,
               op->ac.tried, op->ac.index,
               error, op->ac.abort_code);
@@ -126,13 +129,11 @@ bool afs_select_fileserver(struct afs_operation *op)
                return false;
        }
 
-       op->nr_iterations++;
+       if (op->nr_iterations == 0)
+               goto start;
 
        /* Evaluate the result of the previous operation, if there was one. */
        switch (error) {
-       case SHRT_MAX:
-               goto start;
-
        case 0:
        default:
                /* Success or local failure.  Stop. */