From nobody Thu Jan 23 06:38:46 2025 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 4Ydrr72j4pz5ljQJ; Thu, 23 Jan 2025 06:38:47 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Ydrr71zNKz3RRx; Thu, 23 Jan 2025 06:38:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1737614327; 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=tSY1AuscYOptyQh+KwYXHzBK8IuOvjrN8Lcq4MprOSI=; b=eeXkjtMu8t0/wMI81pDAwN56r22BagEv1kV4t0HoKl2BsxyTM8zWKoOGKmcPMlS10xoCXU wdlnGuqjfOvrFp/49Tfi/WmwRCt9TRgo4QjzowiFy29KP+dHPg9ddxhqYEzdePPHWkxi4y VtmV5DFdhldPwPu5QwefSlXEvNQHWqDb1qQQBf5bMxcVFfsmfM14MUhrp1iDz8dshClvo5 dYzRz2a1ALXIbNIGgHBVMU18t77rrS9t0W+a9wIEFIsvRcFayCmtZXaNCeN92IcyT8bNkV OL3mQIVoOLi8xKf5/5l6voruN1TnykMqgs0xnmUKiVncemTrTUrOwU7YUHn+Fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1737614327; 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=tSY1AuscYOptyQh+KwYXHzBK8IuOvjrN8Lcq4MprOSI=; b=TXRZq0QDlilTAsW5VCMil788D7v+y+eiLXo07YVcxwAtYx0Xv1bLoUoWNUiYhwHxByRguR /n6KjXBZPNPvLHgYLLqS5ukE59hsaEcu19PujJif7lb/5oS5cNwY6AJtxepC+KUPaXcTjB 2qoqNhMzapOBRqkrQt+S3LS4mVWkQBeuxAVJK9ED35vJwiHl6dod6fwgZj1xhUXwGpVY8R u7SBWpwZcKRb5fGX4TwfwW958bLU3mJWJ+QPMy5rS12V1+lveUFE8fqo0moq84JvwXo1HN U94CZ4pr9ZOKRYnS8lzMEuL0BC99P2zoz0Va/O8LTr8/7viAGa++K5z0hJlisQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1737614327; a=rsa-sha256; cv=none; b=x4AmOdq9JMkYWuQVxPGiETs+pSH6Qc1Ziy7UhxJ6t1EtuisuMVf165OIV3dB+XaM/lX85H ezaDoslrOqwEJxbtLtEa2ajKM5qITdB8NFeccgmG17vYfqAbScpmVzvesrc5AtPVXxeh51 dv/5zZRjVQZ4BEvzPfdPizuze4RYcMQVAqB1R+sOxO333PGR9nno3Jo4gPKsCLhKqGqiYW tXLBeuUqw8/Is7+t7qVK3s3x9kvoHnWDnwckvnEAeMqxD/R6YEEyjiwjsbR2Oa2DL8yCxd Nghi671C3RFnhNfk2UnWsKREkyhKuD9ELqZVsZquQ+mWKwADgvyPjFcOZ+YFkg== 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 4Ydrr714K3zC5t; Thu, 23 Jan 2025 06:38:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 50N6ckZH002178; Thu, 23 Jan 2025 06:38:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 50N6ckKV002175; Thu, 23 Jan 2025 06:38:46 GMT (envelope-from git) Date: Thu, 23 Jan 2025 06:38:46 GMT Message-Id: <202501230638.50N6ckKV002175@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kirk McKusick Subject: git: f31c37f8acb2 - stable/14 - Use ffs_sbget() to replace open-coded superblock reload. 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-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/stable/14 X-Git-Reftype: branch X-Git-Commit: f31c37f8acb2c1edf356562994bb524bc2e67ed0 Auto-Submitted: auto-generated The branch stable/14 has been updated by mckusick: URL: https://cgit.FreeBSD.org/src/commit/?id=f31c37f8acb2c1edf356562994bb524bc2e67ed0 commit f31c37f8acb2c1edf356562994bb524bc2e67ed0 Author: Kirk McKusick AuthorDate: 2025-01-15 21:08:42 +0000 Commit: Kirk McKusick CommitDate: 2025-01-23 06:37:43 +0000 Use ffs_sbget() to replace open-coded superblock reload. No functional change intended. Tested-by: Peter Holm (cherry picked from commit c18a6c15f4152029b6d1d0f64aa1ff36faceb9b2) --- sys/ufs/ffs/ffs_vfsops.c | 87 ++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 65 deletions(-) diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index c56603752a50..2b7353d157e2 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -580,8 +580,12 @@ ffs_mount(struct mount *mp) vfs_write_resume(mp, 0); } if ((mp->mnt_flag & MNT_RELOAD) && - (error = ffs_reload(mp, 0)) != 0) + (error = ffs_reload(mp, 0)) != 0) { return (error); + } else { + /* ffs_reload replaces the superblock structure */ + fs = ump->um_fs; + } if (fs->fs_ronly && !vfs_flagopt(mp->mnt_optnew, "ro", NULL, 0)) { /* @@ -742,26 +746,20 @@ ffs_cmount(struct mntarg *ma, void *data, uint64_t flags) * Things to do to update the mount: * 1) invalidate all cached meta-data. * 2) re-read superblock from disk. - * 3) re-read summary information from disk. - * 4) invalidate all inactive vnodes. - * 5) clear MNTK_SUSPEND2 and MNTK_SUSPENDED flags, allowing secondary - * writers, if requested. - * 6) invalidate all cached file data. - * 7) re-read inode data for all active vnodes. + * 3) If requested, clear MNTK_SUSPEND2 and MNTK_SUSPENDED flags + * to allow secondary writers. + * 4) invalidate all cached file data. + * 5) re-read inode data for all active vnodes. */ int ffs_reload(struct mount *mp, int flags) { struct vnode *vp, *mvp, *devvp; struct inode *ip; - void *space; struct buf *bp; struct fs *fs, *newfs; struct ufsmount *ump; - ufs2_daddr_t sblockloc; - int i, blks, error; - uint64_t size; - int32_t *lp; + int error; ump = VFSTOUFS(mp); @@ -784,31 +782,22 @@ ffs_reload(struct mount *mp, int flags) /* * Step 2: re-read superblock from disk. */ - fs = VFSTOUFS(mp)->um_fs; - if ((error = bread(devvp, btodb(fs->fs_sblockloc), fs->fs_sbsize, - NOCRED, &bp)) != 0) + if ((error = ffs_sbget(devvp, &newfs, UFS_STDSB, 0, M_UFSMNT, + ffs_use_bread)) != 0) return (error); - newfs = (struct fs *)bp->b_data; - if ((newfs->fs_magic != FS_UFS1_MAGIC && - newfs->fs_magic != FS_UFS2_MAGIC) || - newfs->fs_bsize > MAXBSIZE || - newfs->fs_bsize < sizeof(struct fs)) { - brelse(bp); - return (EINTEGRITY); - } /* - * Preserve the summary information, read-only status, and - * superblock location by copying these fields into our new - * superblock before using it to update the existing superblock. + * Replace our superblock with the new superblock. Preserve + * our read-only status. */ - newfs->fs_si = fs->fs_si; + fs = VFSTOUFS(mp)->um_fs; newfs->fs_ronly = fs->fs_ronly; - sblockloc = fs->fs_sblockloc; - bcopy(newfs, fs, (uint64_t)fs->fs_sbsize); - brelse(bp); + free(fs->fs_csp, M_UFSMNT); + free(fs->fs_si, M_UFSMNT); + free(fs, M_UFSMNT); + fs = VFSTOUFS(mp)->um_fs = newfs; ump->um_bsize = fs->fs_bsize; ump->um_maxsymlinklen = fs->fs_maxsymlinklen; - ffs_oldfscompat_read(fs, VFSTOUFS(mp), sblockloc); + ffs_oldfscompat_read(fs, VFSTOUFS(mp), fs->fs_sblockloc); UFS_LOCK(ump); if (fs->fs_pendingblocks != 0 || fs->fs_pendinginodes != 0) { printf("WARNING: %s: reload pending error: blocks %jd " @@ -818,42 +807,10 @@ ffs_reload(struct mount *mp, int flags) fs->fs_pendinginodes = 0; } UFS_UNLOCK(ump); - - /* - * Step 3: re-read summary information from disk. - */ - size = fs->fs_cssize; - blks = howmany(size, fs->fs_fsize); - if (fs->fs_contigsumsize > 0) - size += fs->fs_ncg * sizeof(int32_t); - size += fs->fs_ncg * sizeof(uint8_t); - free(fs->fs_csp, M_UFSMNT); - space = malloc(size, M_UFSMNT, M_WAITOK); - fs->fs_csp = space; - for (i = 0; i < blks; i += fs->fs_frag) { - size = fs->fs_bsize; - if (i + fs->fs_frag > blks) - size = (blks - i) * fs->fs_fsize; - error = bread(devvp, fsbtodb(fs, fs->fs_csaddr + i), size, - NOCRED, &bp); - if (error) - return (error); - bcopy(bp->b_data, space, (uint64_t)size); - space = (char *)space + size; - brelse(bp); - } /* - * We no longer know anything about clusters per cylinder group. + * Step 3: If requested, clear MNTK_SUSPEND2 and MNTK_SUSPENDED flags + * to allow secondary writers. */ - if (fs->fs_contigsumsize > 0) { - fs->fs_maxcluster = lp = space; - for (i = 0; i < fs->fs_ncg; i++) - *lp++ = fs->fs_contigsumsize; - space = lp; - } - size = fs->fs_ncg * sizeof(uint8_t); - fs->fs_contigdirs = (uint8_t *)space; - bzero(fs->fs_contigdirs, size); if ((flags & FFSR_UNSUSPEND) != 0) { MNT_ILOCK(mp); mp->mnt_kern_flag &= ~(MNTK_SUSPENDED | MNTK_SUSPEND2);