afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*()
[platform/kernel/linux-starfive.git] / fs / afs / server.c
index b523720..0bd2f5b 100644 (file)
@@ -27,7 +27,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
        const struct afs_addr_list *alist;
        struct afs_server *server = NULL;
        unsigned int i;
-       int seq = 0, diff;
+       int seq = 1, diff;
 
        rcu_read_lock();
 
@@ -35,6 +35,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
                if (server)
                        afs_unuse_server_notime(net, server, afs_server_trace_put_find_rsq);
                server = NULL;
+               seq++; /* 2 on the 1st/lockless path, otherwise odd */
                read_seqbegin_or_lock(&net->fs_addr_lock, &seq);
 
                if (srx->transport.family == AF_INET6) {
@@ -90,7 +91,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu
 {
        struct afs_server *server = NULL;
        struct rb_node *p;
-       int diff, seq = 0;
+       int diff, seq = 1;
 
        _enter("%pU", uuid);
 
@@ -102,7 +103,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu
                if (server)
                        afs_unuse_server(net, server, afs_server_trace_put_uuid_rsq);
                server = NULL;
-
+               seq++; /* 2 on the 1st/lockless path, otherwise odd */
                read_seqbegin_or_lock(&net->fs_lock, &seq);
 
                p = net->fs_servers.rb_node;