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
This commit is contained in:
parent
ee1309994f
commit
e7f8a661a2
@ -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, dephd)
|
||||
* 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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user