The barrier provided by smp_store_release() is before the store, while wake_up_var() needs a full barrier *after* the store. The new store_release_wake_up() interface encodes all the barriers making this sort of bug harder to write. Signed-off-by: NeilBrown <neilb@xxxxxxx> --- fs/nfs/dir.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 492cffd9d3d8..ded86facef8f 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -1837,9 +1837,7 @@ static void block_revalidate(struct dentry *dentry) static void unblock_revalidate(struct dentry *dentry) { - /* store_release ensures wait_var_event() sees the update */ - smp_store_release(&dentry->d_fsdata, NULL); - wake_up_var(&dentry->d_fsdata); + store_release_wake_up(&dentry->d_fsdata, NULL); } /* -- 2.47.0