From nobody Wed Jun 22 21:57:50 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id CFFC7874526; Wed, 22 Jun 2022 21:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LSy1B5T4xz4bG0; Wed, 22 Jun 2022 21:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655935070; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=v5A7IdZYwmfnghS7a3Sl38gyA9rQFaQAleU8KGHuiWc=; b=FqmKu/DlaOHcq2HaHKnGv6zmBcfZuxKDNTcU52Z4oUNnIasrrn/lDoLjQANaraC+4BIuN+ bqebAju7aFCi7VBMa51ojfbruAxp/I8E9N+1XwX9XsPppAkKbMIAn33ft0ir4XWnDjX1aw g7Rcuhw/LCwqtUs1/UrnO5V5KAfc9Y8LPVp9W1R3KB0Tw+zFuueSmX8rXnyshnKROxABf0 FQBDXBVUKnQUoEvU+4kJ0F66U356qJOUW7x0L0HqD81pPZ6XA7pqfL01/T3CM0gBV91exw KSQwcEaG+2Lf/CIqE9PtiTXv9k92byk62dbljV1WqPCpMRhURprVU3u8a8RtQw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 98128647A; Wed, 22 Jun 2022 21:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25MLvoa2055740; Wed, 22 Jun 2022 21:57:50 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25MLvofB055739; Wed, 22 Jun 2022 21:57:50 GMT (envelope-from git) Date: Wed, 22 Jun 2022 21:57:50 GMT Message-Id: <202206222157.25MLvofB055739@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Chuck Silvers Subject: git: f1b4324b81a5 - main - ffs: fix vn_read_from_obj() usage for PAGE_SIZE > block size List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: chs X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f1b4324b81a5b09094111c378ed5cef3b5f8b299 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655935070; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=v5A7IdZYwmfnghS7a3Sl38gyA9rQFaQAleU8KGHuiWc=; b=j9F3Cd46PeF6XrkDWqY4XTaBSo3w+hCd6sl4xBQpQZe8klasZYfoRwkr8oa1gt4+06mu2Y a7BW4kGyr2WJEY/LWlCXlfJZFyv8rKDWxLAzY6l0uTB3f0U+YPZ08QphhNxbVanEoQfW8f B9dC47ruGdmpmHD6v4bC9H88+lhycVguw6jNKc5UUBbnVlUeUEDbC47Lbx7bmH48TR/lAx w4lrqqwasdyAFTz1PeIxiwRtRLsZ9m1RL/sD/fka3PxQU5CrpRaJJynEEFhbBAW3MG22lz P19gHY30fPoxYXZ79xL2S+kEyuNLP2knl6cBIctLUKggBbSzKdUufglfqpuwYg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1655935070; a=rsa-sha256; cv=none; b=E5aepRBtSOviC91wXcF0bdk6Lq4BGBkxK5443fri2+nphejecr4stuCIwWN4TXFcMO0che BdLurXVIw4ddDzkQAuoFhsXKO98scQWw6DFhUZCPgPQtYdJ7f/IDG2u1M71bWHxhzg1zLv yGMd7YdEAd3kn8bZ/LImK7PMSePNycyUqdUyGSQ4QSwlUYdaXjMhVdZxZNJfVPSKM5AW82 NjF57WmJUOu7etNcRWbtpf5m57fmNnqWizwnbAI6Lc9kL2hRq+UsJ7+QA82RsleMbkofcF L70OoSDtoNz0CDClLhRWRtU9bA2Ptxe9x13eC9EbEsaItAxAbCx2KAiLeTBIDg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by chs: URL: https://cgit.FreeBSD.org/src/commit/?id=f1b4324b81a5b09094111c378ed5cef3b5f8b299 commit f1b4324b81a5b09094111c378ed5cef3b5f8b299 Author: Chuck Silvers AuthorDate: 2022-06-22 21:52:42 +0000 Commit: Chuck Silvers CommitDate: 2022-06-22 21:57:29 +0000 ffs: fix vn_read_from_obj() usage for PAGE_SIZE > block size vn_read_from_obj() requires that all pages of a vnode (except the last partial page) be either completely valid or completely invalid, but for file systems with block size smaller than PAGE_SIZE, partially valid pages may exist anywhere in the file. Do not enable the vn_read_from_obj() path in this case. Reviewed by: mckusick, kib, markj Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D34836 --- sys/ufs/ffs/ffs_vfsops.c | 2 ++ sys/ufs/ufs/ufs_vnops.c | 3 ++- sys/ufs/ufs/ufsmount.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 0dc5753e0172..d1414b81bb1e 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -801,6 +801,7 @@ ffs_reload(struct mount *mp, int flags) sblockloc = fs->fs_sblockloc; bcopy(newfs, fs, (u_int)fs->fs_sbsize); brelse(bp); + ump->um_bsize = fs->fs_bsize; ump->um_maxsymlinklen = fs->fs_maxsymlinklen; ffs_oldfscompat_read(fs, VFSTOUFS(mp), sblockloc); UFS_LOCK(ump); @@ -1064,6 +1065,7 @@ ffs_mountfs(odevvp, mp, td) vfs_rel(nmp); vfs_getnewfsid(mp); } + ump->um_bsize = fs->fs_bsize; ump->um_maxsymlinklen = fs->fs_maxsymlinklen; MNT_ILOCK(mp); mp->mnt_flag |= MNT_LOCAL; diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c index 2def837c157a..0a7e6a7875ec 100644 --- a/sys/ufs/ufs/ufs_vnops.c +++ b/sys/ufs/ufs/ufs_vnops.c @@ -314,7 +314,8 @@ ufs_open(struct vop_open_args *ap) ip = VTOI(vp); vnode_create_vobject(vp, DIP(ip, i_size), ap->a_td); - if (vp->v_type == VREG && (vn_irflag_read(vp) & VIRF_PGREAD) == 0) { + if (vp->v_type == VREG && (vn_irflag_read(vp) & VIRF_PGREAD) == 0 && + ip->i_ump->um_bsize >= PAGE_SIZE) { vn_irflag_set_cond(vp, VIRF_PGREAD); } diff --git a/sys/ufs/ufs/ufsmount.h b/sys/ufs/ufs/ufsmount.h index a1a2cdb3f741..d4225eee64dd 100644 --- a/sys/ufs/ufs/ufsmount.h +++ b/sys/ufs/ufs/ufsmount.h @@ -96,6 +96,7 @@ struct ufsmount { u_long um_nindir; /* (c) indirect ptrs per blk */ u_long um_bptrtodb; /* (c) indir disk block ptr */ u_long um_seqinc; /* (c) inc between seq blocks */ + u_long um_bsize; /* (c) fs block size */ uint64_t um_maxsymlinklen; /* (c) max size of short symlink */ struct mtx um_lock; /* (c) Protects ufsmount & fs */