Skip to content

Commit 4ef19dd

Browse files
Christoph Hellwignatoscott
authored andcommitted
[XFS] enable write barriers by default
SGI-PV: 912426 SGI-Modid: xfs-linux-melb:xfs-kern:201981a Signed-off-by: Christoph Hellwig <hch@sgi.com> Signed-off-by: Nathan Scott <nathans@sgi.com>
1 parent d3a9b1f commit 4ef19dd

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

fs/xfs/linux-2.6/xfs_super.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,20 +306,23 @@ xfs_mountfs_check_barriers(xfs_mount_t *mp)
306306
xfs_fs_cmn_err(CE_NOTE, mp,
307307
"Disabling barriers, not supported with external log device");
308308
mp->m_flags &= ~XFS_MOUNT_BARRIER;
309+
return;
309310
}
310311

311312
if (mp->m_ddev_targp->pbr_bdev->bd_disk->queue->ordered ==
312313
QUEUE_ORDERED_NONE) {
313314
xfs_fs_cmn_err(CE_NOTE, mp,
314315
"Disabling barriers, not supported by the underlying device");
315316
mp->m_flags &= ~XFS_MOUNT_BARRIER;
317+
return;
316318
}
317319

318320
error = xfs_barrier_test(mp);
319321
if (error) {
320322
xfs_fs_cmn_err(CE_NOTE, mp,
321323
"Disabling barriers, trial barrier write failed");
322324
mp->m_flags &= ~XFS_MOUNT_BARRIER;
325+
return;
323326
}
324327
}
325328

fs/xfs/xfs_vfsops.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,8 @@ xfs_start_flags(
312312
mp->m_flags |= XFS_MOUNT_NOUUID;
313313
if (ap->flags & XFSMNT_BARRIER)
314314
mp->m_flags |= XFS_MOUNT_BARRIER;
315+
else
316+
mp->m_flags &= ~XFS_MOUNT_BARRIER;
315317

316318
return 0;
317319
}
@@ -655,6 +657,11 @@ xfs_mntupdate(
655657
else
656658
mp->m_flags &= ~XFS_MOUNT_NOATIME;
657659

660+
if (args->flags & XFSMNT_BARRIER)
661+
mp->m_flags |= XFS_MOUNT_BARRIER;
662+
else
663+
mp->m_flags &= ~XFS_MOUNT_BARRIER;
664+
658665
if ((vfsp->vfs_flag & VFS_RDONLY) &&
659666
!(*flags & MS_RDONLY)) {
660667
vfsp->vfs_flag &= ~VFS_RDONLY;
@@ -1634,6 +1641,7 @@ xfs_vget(
16341641
#define MNTOPT_NORECOVERY "norecovery" /* don't run XFS recovery */
16351642
#define MNTOPT_BARRIER "barrier" /* use writer barriers for log write and
16361643
* unwritten extent conversion */
1644+
#define MNTOPT_NOBARRIER "nobarrier" /* .. disable */
16371645
#define MNTOPT_OSYNCISOSYNC "osyncisosync" /* o_sync is REALLY o_sync */
16381646
#define MNTOPT_64BITINODE "inode64" /* inodes can be allocated anywhere */
16391647
#define MNTOPT_IKEEP "ikeep" /* do not free empty inode clusters */
@@ -1681,6 +1689,7 @@ xfs_parseargs(
16811689

16821690
args->flags2 |= XFSMNT2_COMPAT_IOSIZE;
16831691
args->flags |= XFSMNT_COMPAT_ATTR;
1692+
args->flags |= XFSMNT_BARRIER;
16841693

16851694
#if 0 /* XXX: off by default, until some remaining issues ironed out */
16861695
args->flags |= XFSMNT_IDELETE; /* default to on */
@@ -1806,6 +1815,8 @@ xfs_parseargs(
18061815
args->flags |= XFSMNT_NOUUID;
18071816
} else if (!strcmp(this_char, MNTOPT_BARRIER)) {
18081817
args->flags |= XFSMNT_BARRIER;
1818+
} else if (!strcmp(this_char, MNTOPT_NOBARRIER)) {
1819+
args->flags &= ~XFSMNT_BARRIER;
18091820
} else if (!strcmp(this_char, MNTOPT_IKEEP)) {
18101821
args->flags &= ~XFSMNT_IDELETE;
18111822
} else if (!strcmp(this_char, MNTOPT_NOIKEEP)) {
@@ -1892,7 +1903,6 @@ xfs_showargs(
18921903
{ XFS_MOUNT_NOUUID, "," MNTOPT_NOUUID },
18931904
{ XFS_MOUNT_NORECOVERY, "," MNTOPT_NORECOVERY },
18941905
{ XFS_MOUNT_OSYNCISOSYNC, "," MNTOPT_OSYNCISOSYNC },
1895-
{ XFS_MOUNT_BARRIER, "," MNTOPT_BARRIER },
18961906
{ XFS_MOUNT_IDELETE, "," MNTOPT_NOIKEEP },
18971907
{ 0, NULL }
18981908
};
@@ -1941,6 +1951,9 @@ xfs_showargs(
19411951
if (!(vfsp->vfs_flag & VFS_32BITINODES))
19421952
seq_printf(m, "," MNTOPT_64BITINODE);
19431953

1954+
if (!(vfsp->vfs_flag & XFS_MOUNT_BARRIER))
1955+
seq_printf(m, "," MNTOPT_NOBARRIER);
1956+
19441957
if (vfsp->vfs_flag & VFS_GRPID)
19451958
seq_printf(m, "," MNTOPT_GRPID);
19461959

0 commit comments

Comments
 (0)