nfsd: Fix creation time serialization order
[ Upstream commitd7dbed457c
] In nfsd4_encode_fattr(), TIME_CREATE was being written out after all other times. However, they should be written out in an order that matches the bit flags in bmval1, which in this case are #define FATTR4_WORD1_TIME_ACCESS (1UL << 15) #define FATTR4_WORD1_TIME_CREATE (1UL << 18) #define FATTR4_WORD1_TIME_DELTA (1UL << 19) #define FATTR4_WORD1_TIME_METADATA (1UL << 20) #define FATTR4_WORD1_TIME_MODIFY (1UL << 21) so TIME_CREATE should come second. I noticed this on a FreeBSD NFSv4.2 client, which supports creation times. On this client, file times were weirdly permuted. With this patch applied on the server, times looked normal on the client. Fixes:e377a3e698
("nfsd: Add support for the birth time attribute") Link: https://unix.stackexchange.com/q/749605/56202 Signed-off-by: Tavian Barnes <tavianator@tavianator.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
Родитель
760a6f755d
Коммит
05b452e874
|
@ -3365,6 +3365,11 @@ out_acl:
|
|||
if (status)
|
||||
goto out;
|
||||
}
|
||||
if (bmval1 & FATTR4_WORD1_TIME_CREATE) {
|
||||
status = nfsd4_encode_nfstime4(xdr, &stat.btime);
|
||||
if (status)
|
||||
goto out;
|
||||
}
|
||||
if (bmval1 & FATTR4_WORD1_TIME_DELTA) {
|
||||
p = xdr_reserve_space(xdr, 12);
|
||||
if (!p)
|
||||
|
@ -3381,11 +3386,6 @@ out_acl:
|
|||
if (status)
|
||||
goto out;
|
||||
}
|
||||
if (bmval1 & FATTR4_WORD1_TIME_CREATE) {
|
||||
status = nfsd4_encode_nfstime4(xdr, &stat.btime);
|
||||
if (status)
|
||||
goto out;
|
||||
}
|
||||
if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {
|
||||
u64 ino = stat.ino;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче