nfsd: set missing after_change as before_change + 1
authorJeff Layton <jlayton@kernel.org>
Mon, 24 Jul 2023 14:53:39 +0000 (10:53 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Tue, 29 Aug 2023 21:45:22 +0000 (17:45 -0400)
In the event that we can't fetch post_op_attr attributes, we still need
to set a value for the after_change. The operation has already happened,
so we're not able to return an error at that point, but we do want to
ensure that the client knows that its cache should be invalidated.

If we weren't able to fetch post-op attrs, then just set the
after_change to before_change + 1. The atomic flag should already be
clear in this case.

Suggested-by: Neil Brown <neilb@suse.de>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4proc.c

index a9c84339ff65955592fa8efacbf199ba4de41c92..7588fd1859a4f2a159369e9815fb3cd3ca2cae30 100644 (file)
@@ -411,7 +411,7 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
        if (WARN_ON_ONCE(!fhp->fh_pre_saved))
                cinfo->before_change = 0;
        if (!fhp->fh_post_saved)
-               cinfo->after_change = 0;
+               cinfo->after_change = cinfo->before_change + 1;
 }
 
 static __be32