Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Feb 2023 22:31:40 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: e59180ea09a1 - main - msdosfs: correct handling of vnode pager size on file extension error
Message-ID:  <202302132231.31DMVeKE080725@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=e59180ea09a1d1d1463f2a269e94efa0f0b677c5

commit e59180ea09a1d1d1463f2a269e94efa0f0b677c5
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2023-02-10 04:58:43 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2023-02-13 22:29:19 +0000

    msdosfs: correct handling of vnode pager size on file extension error
    
    If extension fails, vnode pager recorded size might be left increased.
    Only update vnode pager when extension is past the point of no rollback.
    
    Reviewed by:    markj
    Tested by:      pho
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D38549
---
 sys/fs/msdosfs/msdosfs_denode.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/sys/fs/msdosfs/msdosfs_denode.c b/sys/fs/msdosfs/msdosfs_denode.c
index 9a9916e39a67..6c38481681de 100644
--- a/sys/fs/msdosfs/msdosfs_denode.c
+++ b/sys/fs/msdosfs/msdosfs_denode.c
@@ -386,10 +386,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
@@ -530,6 +528,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))));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202302132231.31DMVeKE080725>