diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2023-02-10 04:58:43 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2023-02-19 05:16:25 +0000 |
commit | 64152225022bea784ca1948a67e7c040a8bb040a (patch) | |
tree | 16fb2f533e6ea9c90281a2b4960c2ac157e19328 | |
parent | 071a0b5b7058b97b629e6aa49e7d03bb87615f5f (diff) | |
download | src-64152225022bea784ca1948a67e7c040a8bb040a.tar.gz src-64152225022bea784ca1948a67e7c040a8bb040a.zip |
msdosfs: correct handling of vnode pager size on file extension error
(cherry picked from commit e59180ea09a1d1d1463f2a269e94efa0f0b677c5)
-rw-r--r-- | sys/fs/msdosfs/msdosfs_denode.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c index 030c96d6d354..8511d873ea50 100644 --- a/sys/fs/msdosfs/msdosfs_denode.c +++ b/sys/fs/msdosfs/msdosfs_denode.c @@ -384,10 +384,8 @@ detrunc(struct denode *dep, u_long length, int flags, struct ucred *cred) return (EINVAL); } - if (dep->de_FileSize < length) { - vnode_pager_setsize(DETOV(dep), length); + if (dep->de_FileSize < length) return (deextend(dep, length, cred)); - } /* * If the desired length is 0 then remember the starting cluster of @@ -528,6 +526,7 @@ deextend(struct denode *dep, u_long length, struct ucred *cred) return (error); } } + vnode_pager_setsize(DETOV(dep), length); dep->de_FileSize = length; dep->de_flag |= DE_UPDATE | DE_MODIFIED; return (deupdat(dep, !DOINGASYNC(DETOV(dep)))); |