projects
/
platform
/
kernel
/
linux-rpi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*()
[platform/kernel/linux-rpi.git]
/
fs
/
afs
/
server.c
diff --git
a/fs/afs/server.c
b/fs/afs/server.c
index
b523720
..
0bd2f5b
100644
(file)
--- a/
fs/afs/server.c
+++ b/
fs/afs/server.c
@@
-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;
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();
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;
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) {
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;
{
struct afs_server *server = NULL;
struct rb_node *p;
- int diff, seq =
0
;
+ int diff, seq =
1
;
_enter("%pU", uuid);
_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;
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;
read_seqbegin_or_lock(&net->fs_lock, &seq);
p = net->fs_servers.rb_node;