From nobody Wed Aug 9 00:11:32 2023 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 4RL9TK0HVWz4Tm1g; Wed, 9 Aug 2023 00:11:33 +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 4RL9TJ6XK1z3KV7; Wed, 9 Aug 2023 00:11:32 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691539892; 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=NQsz8qdh+mGdp1Txx04kL1bfUWdF/d1Q3dd7ONpUhvo=; b=CI0sjHtEmuYXCKsecuXPW0T/MwUpEJUPqwwEU+uTdGn+XWHQ3F6mjsWIjfqVwMZ+bNFXPA fPirkEMCTUn7PXlqYEIm41DWK6SVocpWZKZuh8vnTb7jv5/TkqTlqJkDXTqvbY065h75Ia Xh96e1TWzNSEgb/nHhIPXgAphDkfMUHbLVeIJTnGlGyjrUj1ZwSMhw9HGM9XFitU52cxFn mHJwves9BNU13tBeCScYZ6e9gKWH5nu8JJta/N9FmRqRJRT7bjefBAQpHXmdi4+DB1RB9Z BfW+9/HT5P3JLPxuS5+nXSxo9IkxrJARW5vKqDRoV1K0D1T8Cmo+/FGlNKrm1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1691539892; 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=NQsz8qdh+mGdp1Txx04kL1bfUWdF/d1Q3dd7ONpUhvo=; b=kLWp8lbgKY2a+xeYGp3P7nmSBMRSq5OLdv2FYJBmjls/AzdfvcRm4lWBNClDkqCjRDAWs1 KIcl4D0Wb/ikEJqMv1YqJVOqre8Jn06knosbkfqNE1/1LUFYAzijvHLfHjUNYA5iGSq/kN L+74LU+YJP3eIve/pUWZ8gs2wixLl9tt/HZ2haPh8nGLhtTfcefeCvCpKAld8B6YX1WsTG Xd7K0zI90Y6GDY+43Wy+zZ1lRj7c46Qn0HYaTPwjl8CIh2kMu2tJy721DJf4ZEfB7MwsLF at27Gqz3djuxedmBMY74h6D2BX5JehIi1kTDSuj7pfbyC8SXMXpfneASYw0LdA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1691539892; a=rsa-sha256; cv=none; b=Nm7pHBdYxGtF/FZ+WcgsTnvWabFaPB7xl3pf1eWiGCRjpTVU/ULOJ8QRmqV4UQ5k46h1g2 BRB1NeNHzCpKnLeiQXDZ+YMjEMTwzYmoymxAUczd7lvMAon6pPTGFbb7XakosnjepjL1Rb Ta+1/wZNzzZEEJbcw0KPZH9lmtSnBl7uG419qNJI8I4XvSgDcZHDY/lUl4CbQf8IJnHQSK X9cc7hZMaob3hGiDzM/BoliwzhLHjBfIZGLpVsfn/5i/UXYVAvT1JUmxR4w8xKbLyEuS71 9NIKz8vInBbfJ27XsQIja6iz5MEae9am/kPEVNK6RBwNsnRbTMBcSNLJIH+KFQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4RL9TJ5chmzv4s; Wed, 9 Aug 2023 00:11:32 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3790BW2k004219; Wed, 9 Aug 2023 00:11:32 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3790BW23004216; Wed, 9 Aug 2023 00:11:32 GMT (envelope-from git) Date: Wed, 9 Aug 2023 00:11:32 GMT Message-Id: <202308090011.3790BW23004216@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kirk McKusick Subject: git: 6dff61a1d187 - main - Rate limit kernel UFS/FFS cylinder group check-hash error messages. 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: mckusick X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6dff61a1d1878ea5e9f6e5c36521b3f39cd34b33 Auto-Submitted: auto-generated The branch main has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=6dff61a1d1878ea5e9f6e5c36521b3f39cd34b33 commit 6dff61a1d1878ea5e9f6e5c36521b3f39cd34b33 Author: Kirk McKusick AuthorDate: 2023-08-09 00:10:07 +0000 Commit: Kirk McKusick CommitDate: 2023-08-09 00:11:04 +0000 Rate limit kernel UFS/FFS cylinder group check-hash error messages. When a large file is deleted or a large number of files are deleted, even a single cylinder group with a bad check hash can generate thousands of check-hash warnings. As with other filesystem messages such as out-of-space, print a maximum of one check-hash error per second. Note the limit is per filesystem. If two filesystems have cylinder group(s) with a bad check hash, each will print a maximum of one check-hash error message per second. MFC-after: 1 week Sponsored-by: The FreeBSD Foundation --- sys/ufs/ffs/ffs_alloc.c | 58 +++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/sys/ufs/ffs/ffs_alloc.c b/sys/ufs/ffs/ffs_alloc.c index e173253720c6..f6bf4c1dadc0 100644 --- a/sys/ufs/ffs/ffs_alloc.c +++ b/sys/ufs/ffs/ffs_alloc.c @@ -2991,15 +2991,6 @@ ffs_mapsearch(struct fs *fs, return (-1); } -static const struct statfs * -ffs_getmntstat(struct vnode *devvp) -{ - - if (devvp->v_type == VCHR) - return (&devvp->v_rdev->si_mountpt->mnt_stat); - return (ffs_getmntstat(VFSTOUFS(devvp->v_mount)->um_devvp)); -} - /* * Fetch and verify a cylinder group. */ @@ -3013,6 +3004,7 @@ ffs_getcg(struct fs *fs, { struct buf *bp; struct cg *cgp; + struct mount *mp; const struct statfs *sfs; daddr_t blkno; int error; @@ -3021,10 +3013,13 @@ ffs_getcg(struct fs *fs, *cgpp = NULL; if ((fs->fs_metackhash & CK_CYLGRP) != 0) flags |= GB_CKHASH; - if (devvp->v_type == VREG) - blkno = fragstoblks(fs, cgtod(fs, cg)); - else + if (devvp->v_type == VCHR) { blkno = fsbtodb(fs, cgtod(fs, cg)); + mp = devvp->v_rdev->si_mountpt; + } else { + blkno = fragstoblks(fs, cgtod(fs, cg)); + mp = devvp->v_mount; + } error = breadn_flags(devvp, blkno, blkno, (int)fs->fs_cgsize, NULL, NULL, 0, NOCRED, flags, ffs_ckhash_cg, &bp); if (error != 0) @@ -3033,28 +3028,35 @@ ffs_getcg(struct fs *fs, if ((fs->fs_metackhash & CK_CYLGRP) != 0 && (bp->b_flags & B_CKHASH) != 0 && cgp->cg_ckhash != bp->b_ckhash) { - sfs = ffs_getmntstat(devvp); - printf("UFS %s%s (%s) cylinder checksum failed: cg %ju, cgp: " - "0x%x != bp: 0x%jx\n", - devvp->v_type == VCHR ? "" : "snapshot of ", - sfs->f_mntfromname, sfs->f_mntonname, - (intmax_t)cg, cgp->cg_ckhash, (uintmax_t)bp->b_ckhash); + if (ppsratecheck(&VFSTOUFS(mp)->um_last_integritymsg, + &VFSTOUFS(mp)->um_secs_integritymsg, 1)) { + sfs = &mp->mnt_stat; + printf("UFS %s%s (%s) cylinder checkhash failed: " + "cg %ju, cgp: 0x%x != bp: 0x%jx\n", + devvp->v_type == VCHR ? "" : "snapshot of ", + sfs->f_mntfromname, sfs->f_mntonname, (intmax_t)cg, + cgp->cg_ckhash, (uintmax_t)bp->b_ckhash); + } bp->b_flags &= ~B_CKHASH; bp->b_flags |= B_INVAL | B_NOCACHE; brelse(bp); return (EIO); } if (!cg_chkmagic(cgp) || cgp->cg_cgx != cg) { - sfs = ffs_getmntstat(devvp); - printf("UFS %s%s (%s)", - devvp->v_type == VCHR ? "" : "snapshot of ", - sfs->f_mntfromname, sfs->f_mntonname); - if (!cg_chkmagic(cgp)) - printf(" cg %ju: bad magic number 0x%x should be " - "0x%x\n", (intmax_t)cg, cgp->cg_magic, CG_MAGIC); - else - printf(": wrong cylinder group cg %ju != cgx %u\n", - (intmax_t)cg, cgp->cg_cgx); + if (ppsratecheck(&VFSTOUFS(mp)->um_last_integritymsg, + &VFSTOUFS(mp)->um_secs_integritymsg, 1)) { + sfs = &mp->mnt_stat; + printf("UFS %s%s (%s)", + devvp->v_type == VCHR ? "" : "snapshot of ", + sfs->f_mntfromname, sfs->f_mntonname); + if (!cg_chkmagic(cgp)) + printf(" cg %ju: bad magic number 0x%x should " + "be 0x%x\n", (intmax_t)cg, cgp->cg_magic, + CG_MAGIC); + else + printf(": wrong cylinder group cg %ju != " + "cgx %u\n", (intmax_t)cg, cgp->cg_cgx); + } bp->b_flags &= ~B_CKHASH; bp->b_flags |= B_INVAL | B_NOCACHE; brelse(bp);