mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 17:18:25 +02:00
Instead of calling xchg() and unrcu_pointer() before
nfsd_file_put_local(), we now pass pointer to the __rcu pointer and call
xchg() and unrcu_pointer() inside that function.
Where unrcu_pointer() is currently called the internals of "struct
nfsd_file" are not known and that causes older compilers such as gcc-8
to complain.
In some cases we have a __kernel (aka normal) pointer not an __rcu
pointer so we need to cast it to __rcu first. This is strictly a
weakening so no information is lost. Somewhat surprisingly, this cast
is accepted by gcc-8.
This has the pleasing result that the cmpxchg() which sets ro_file and
rw_file, and also the xchg() which clears them, are both now in the nfsd
code.
Reported-by: Pali Rohár <pali@kernel.org>
Reported-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Fixes:
|
||
|---|---|---|
| .. | ||
| common.c | ||
| grace.c | ||
| localio_trace.c | ||
| localio_trace.h | ||
| Makefile | ||
| nfs_ssc.c | ||
| nfsacl.c | ||
| nfslocalio.c | ||