From 0af1998d9a68f83fdb17f2a319cbff12934c5e48 Mon Sep 17 00:00:00 2001 From: Stephen Lord Date: Tue, 16 Sep 2003 21:28:02 -0500 Subject: [PATCH] [XFS] Some tweaks to the additional inode flags, suggested by Ethan Benson SGI Modid: 2.5.x-xfs:slinx:158493a --- fs/xfs/linux/xfs_globals.c | 1 + fs/xfs/linux/xfs_linux.h | 1 + fs/xfs/linux/xfs_stats.c | 1 + fs/xfs/linux/xfs_sysctl.c | 5 +++++ fs/xfs/linux/xfs_sysctl.h | 2 ++ fs/xfs/xfs_inode.c | 16 ++++++++++++---- 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/fs/xfs/linux/xfs_globals.c b/fs/xfs/linux/xfs_globals.c index ef99bdf05ff12..b58003d3a8336 100644 --- a/fs/xfs/linux/xfs_globals.c +++ b/fs/xfs/linux/xfs_globals.c @@ -61,6 +61,7 @@ xfs_param_t xfs_params = { .stats_clear = { 0, 0, 1 }, .inherit_sync = { 0, 1, 1 }, .inherit_nodump = { 0, 1, 1 }, + .inherit_noatim = { 0, 1, 1 }, }; /* diff --git a/fs/xfs/linux/xfs_linux.h b/fs/xfs/linux/xfs_linux.h index f319e8368ef5c..1d592b9807aa2 100644 --- a/fs/xfs/linux/xfs_linux.h +++ b/fs/xfs/linux/xfs_linux.h @@ -98,6 +98,7 @@ static inline void set_buffer_unwritten_io(struct buffer_head *bh) #define xfs_stats_clear xfs_params.stats_clear.val #define xfs_inherit_sync xfs_params.inherit_sync.val #define xfs_inherit_nodump xfs_params.inherit_nodump.val +#define xfs_inherit_noatime xfs_params.inherit_noatim.val #define NBPP PAGE_SIZE #define DPPSHFT (PAGE_SHIFT - 9) diff --git a/fs/xfs/linux/xfs_stats.c b/fs/xfs/linux/xfs_stats.c index d90f5bc6b78c3..a3a6766a4758a 100644 --- a/fs/xfs/linux/xfs_stats.c +++ b/fs/xfs/linux/xfs_stats.c @@ -80,6 +80,7 @@ xfs_read_xfsstats( xfsstats.xs_xstrat_bytes, xfsstats.xs_write_bytes, xfsstats.xs_read_bytes); + len += sprintf(buffer + len, "debug %u\n", defined(XFSDEBUG)); if (offset >= len) { *start = buffer; diff --git a/fs/xfs/linux/xfs_sysctl.c b/fs/xfs/linux/xfs_sysctl.c index 1b731f95b1edf..48d58aec008f8 100644 --- a/fs/xfs/linux/xfs_sysctl.c +++ b/fs/xfs/linux/xfs_sysctl.c @@ -107,6 +107,11 @@ STATIC ctl_table xfs_table[] = { &sysctl_intvec, NULL, &xfs_params.inherit_nodump.min, &xfs_params.inherit_nodump.max}, + {XFS_INHERIT_NOATIME, "inherit_noatime", &xfs_params.inherit_noatim.val, + sizeof(ulong), 0644, NULL, &proc_doulongvec_minmax, + &sysctl_intvec, NULL, + &xfs_params.inherit_noatim.min, &xfs_params.inherit_noatim.max}, + /* please keep this the last entry */ #ifdef CONFIG_PROC_FS {XFS_STATS_CLEAR, "stats_clear", &xfs_params.stats_clear.val, diff --git a/fs/xfs/linux/xfs_sysctl.h b/fs/xfs/linux/xfs_sysctl.h index 0b6e690172aa6..35faa5ec0019b 100644 --- a/fs/xfs/linux/xfs_sysctl.h +++ b/fs/xfs/linux/xfs_sysctl.h @@ -57,6 +57,7 @@ typedef struct xfs_param { xfs_sysctl_val_t stats_clear; /* Reset all XFS statistics to zero. */ xfs_sysctl_val_t inherit_sync; /* Inherit the "sync" inode flag. */ xfs_sysctl_val_t inherit_nodump;/* Inherit the "nodump" inode flag. */ + xfs_sysctl_val_t inherit_noatim;/* Inherit the "noatime" inode flag. */ } xfs_param_t; /* @@ -84,6 +85,7 @@ enum { XFS_STATS_CLEAR = 12, XFS_INHERIT_SYNC = 13, XFS_INHERIT_NODUMP = 14, + XFS_INHERIT_NOATIME = 15, }; extern xfs_param_t xfs_params; diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 4bce4b0f91063..e5f071245869a 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1197,8 +1197,6 @@ xfs_ialloc( ip->i_d.di_dmevmask = 0; ip->i_d.di_dmstate = 0; ip->i_d.di_flags = 0; - if ((pip->i_d.di_flags & XFS_DIFLAG_NODUMP) && xfs_inherit_nodump) - ip->i_d.di_flags |= XFS_DIFLAG_NODUMP; flags = XFS_ILOG_CORE; switch (mode & IFMT) { case IFIFO: @@ -1212,8 +1210,18 @@ xfs_ialloc( break; case IFREG: case IFDIR: - if ((pip->i_d.di_flags & XFS_DIFLAG_SYNC) && xfs_inherit_sync) - ip->i_d.di_flags |= XFS_DIFLAG_SYNC; + if (pip->i_d.di_flags & + (XFS_DIFLAG_NOATIME|XFS_DIFLAG_NODUMP|XFS_DIFLAG_SYNC)) { + if ((pip->i_d.di_flags & XFS_DIFLAG_NOATIME) && + xfs_inherit_noatime) + ip->i_d.di_flags |= XFS_DIFLAG_NOATIME; + if ((pip->i_d.di_flags & XFS_DIFLAG_NODUMP) && + xfs_inherit_nodump) + ip->i_d.di_flags |= XFS_DIFLAG_NODUMP; + if ((pip->i_d.di_flags & XFS_DIFLAG_SYNC) && + xfs_inherit_sync) + ip->i_d.di_flags |= XFS_DIFLAG_SYNC; + } case IFLNK: ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_df.if_flags = XFS_IFEXTENTS; -- 2.53.0