From owner-svn-src-all@freebsd.org Fri Jun 29 22:24:43 2018 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E63CFF7F57E; Fri, 29 Jun 2018 22:24:42 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 845BF7F37C; Fri, 29 Jun 2018 22:24:42 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3D19126EA0; Fri, 29 Jun 2018 22:24:42 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w5TMOgCV062647; Fri, 29 Jun 2018 22:24:42 GMT (envelope-from mckusick@FreeBSD.org) Received: (from mckusick@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w5TMOfSi062643; Fri, 29 Jun 2018 22:24:41 GMT (envelope-from mckusick@FreeBSD.org) Message-Id: <201806292224.w5TMOfSi062643@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mckusick set sender to mckusick@FreeBSD.org using -f From: Kirk McKusick Date: Fri, 29 Jun 2018 22:24:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r335808 - in head/sys/ufs: ffs ufs X-SVN-Group: head X-SVN-Commit-Author: mckusick X-SVN-Commit-Paths: in head/sys/ufs: ffs ufs X-SVN-Commit-Revision: 335808 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jun 2018 22:24:43 -0000 Author: mckusick Date: Fri Jun 29 22:24:41 2018 New Revision: 335808 URL: https://svnweb.freebsd.org/changeset/base/335808 Log: Create um_flags in the ufsmount structure to hold flags for a UFS filesystem. Convert integer structure flags to use um_flags: int um_candelete; /* devvp supports TRIM */ int um_writesuspended; /* suspension in progress */ become: #define UM_CANDELETE 0x00000001 /* devvp supports TRIM */ #define UM_WRITESUSPENDED 0x00000002 /* suspension in progress */ This is in preparation for adding other flags to indicate forcible unmount in progress after a disk failure and possibly forcible downgrade to read-only. No functional change intended. Sponsored by: Netflix Modified: head/sys/ufs/ffs/ffs_alloc.c head/sys/ufs/ffs/ffs_suspend.c head/sys/ufs/ffs/ffs_vfsops.c head/sys/ufs/ufs/ufsmount.h Modified: head/sys/ufs/ffs/ffs_alloc.c ============================================================================== --- head/sys/ufs/ffs/ffs_alloc.c Fri Jun 29 22:10:40 2018 (r335807) +++ head/sys/ufs/ffs/ffs_alloc.c Fri Jun 29 22:24:41 2018 (r335808) @@ -495,7 +495,7 @@ ffs_reallocblks(ap) * optimization. Also skip if reallocblks has been disabled globally. */ ump = ap->a_vp->v_mount->mnt_data; - if (ump->um_candelete || doreallocblks == 0) + if (((ump->um_flags) & UM_CANDELETE) != 0 || doreallocblks == 0) return (ENOSPC); /* @@ -2322,7 +2322,7 @@ ffs_blkfree(ump, fs, devvp, bno, size, inum, vtype, de * Nothing to delay if TRIM is disabled, or the operation is * performed on the snapshot. */ - if (!ump->um_candelete || devvp->v_type == VREG) { + if (((ump->um_flags) & UM_CANDELETE) == 0 || devvp->v_type == VREG) { ffs_blkfree_cg(ump, fs, devvp, bno, size, inum, dephd); return; } Modified: head/sys/ufs/ffs/ffs_suspend.c ============================================================================== --- head/sys/ufs/ffs/ffs_suspend.c Fri Jun 29 22:10:40 2018 (r335807) +++ head/sys/ufs/ffs/ffs_suspend.c Fri Jun 29 22:24:41 2018 (r335808) @@ -78,7 +78,7 @@ ffs_susp_suspended(struct mount *mp) sx_assert(&ffs_susp_lock, SA_LOCKED); ump = VFSTOUFS(mp); - if (ump->um_writesuspended) + if ((ump->um_flags & UM_WRITESUSPENDED) != 0) return (1); return (0); } @@ -210,7 +210,7 @@ ffs_susp_suspend(struct mount *mp) if ((error = vfs_write_suspend(mp, VS_SKIP_UNMOUNT)) != 0) return (error); - ump->um_writesuspended = 1; + ump->um_flags |= UM_WRITESUSPENDED; return (0); } @@ -255,7 +255,7 @@ ffs_susp_dtor(void *data) vfs_write_resume(mp, 0); vfs_unbusy(mp); - ump->um_writesuspended = 0; + ump->um_flags &= ~UM_WRITESUSPENDED; sx_xunlock(&ffs_susp_lock); } Modified: head/sys/ufs/ffs/ffs_vfsops.c ============================================================================== --- head/sys/ufs/ffs/ffs_vfsops.c Fri Jun 29 22:10:40 2018 (r335807) +++ head/sys/ufs/ffs/ffs_vfsops.c Fri Jun 29 22:24:41 2018 (r335808) @@ -770,6 +770,7 @@ ffs_mountfs(devvp, mp, td) struct ucred *cred; struct g_consumer *cp; struct mount *nmp; + int candelete; fs = NULL; ump = NULL; @@ -960,8 +961,10 @@ ffs_mountfs(devvp, mp, td) if ((fs->fs_flags & FS_TRIM) != 0) { len = sizeof(int); if (g_io_getattr("GEOM::candelete", cp, &len, - &ump->um_candelete) == 0) { - if (!ump->um_candelete) + &candelete) == 0) { + if (candelete) + ump->um_flags |= UM_CANDELETE; + else printf("WARNING: %s: TRIM flag on fs but disk " "does not support TRIM\n", mp->mnt_stat.f_mntonname); @@ -969,9 +972,8 @@ ffs_mountfs(devvp, mp, td) printf("WARNING: %s: TRIM flag on fs but disk does " "not confirm that it supports TRIM\n", mp->mnt_stat.f_mntonname); - ump->um_candelete = 0; } - if (ump->um_candelete) { + if (((ump->um_flags) & UM_CANDELETE) != 0) { ump->um_trim_tq = taskqueue_create("trim", M_WAITOK, taskqueue_thread_enqueue, &ump->um_trim_tq); taskqueue_start_threads(&ump->um_trim_tq, 1, PVFS, Modified: head/sys/ufs/ufs/ufsmount.h ============================================================================== --- head/sys/ufs/ufs/ufsmount.h Fri Jun 29 22:10:40 2018 (r335807) +++ head/sys/ufs/ufs/ufsmount.h Fri Jun 29 22:24:41 2018 (r335808) @@ -86,10 +86,9 @@ struct ufsmount { time_t um_itime[MAXQUOTAS]; /* inode quota time limit */ char um_qflags[MAXQUOTAS]; /* quota specific flags */ int64_t um_savedmaxfilesize; /* XXX - limit maxfilesize */ - int um_candelete; /* devvp supports TRIM */ - int um_writesuspended; /* suspension in progress */ - u_int um_trim_inflight; - struct taskqueue *um_trim_tq; + u_int um_flags; /* filesystem flags */ + u_int um_trim_inflight; /* outstanding trim count */ + struct taskqueue *um_trim_tq; /* trim request queue */ int (*um_balloc)(struct vnode *, off_t, int, struct ucred *, int, struct buf **); int (*um_blkatoff)(struct vnode *, off_t, char **, struct buf **); @@ -103,6 +102,15 @@ struct ufsmount { void (*um_snapgone)(struct inode *); }; +/* + * filesystem flags + */ +#define UM_CANDELETE 0x00000001 /* devvp supports TRIM */ +#define UM_WRITESUSPENDED 0x00000002 /* suspension in progress */ + +/* + * function prototypes + */ #define UFS_BALLOC(aa, bb, cc, dd, ee, ff) VFSTOUFS((aa)->v_mount)->um_balloc(aa, bb, cc, dd, ee, ff) #define UFS_BLKATOFF(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_blkatoff(aa, bb, cc, dd) #define UFS_TRUNCATE(aa, bb, cc, dd) VFSTOUFS((aa)->v_mount)->um_truncate(aa, bb, cc, dd)