Commit d3446eac3f50dade2f09ed212b112609ee78fb33

Authored by Barry Naujok
Committed by Nathan Scott
1 parent fbc1462bcb

[XFS] Add degframentation exclusion support

SGI-PV: 953061
SGI-Modid: xfs-linux-melb:xfs-kern:25986a

Signed-off-by: Barry Naujok <bnaujok@sgi.com>
Signed-off-by: Nathan Scott <nathans@sgi.com>

Showing 8 changed files with 20 additions and 1 deletions Side-by-side Diff

fs/xfs/linux-2.6/xfs_globals.c
... ... @@ -45,6 +45,7 @@
45 45 .xfs_buf_age = { 1*100, 15*100, 7200*100},
46 46 .inherit_nosym = { 0, 0, 1 },
47 47 .rotorstep = { 1, 1, 255 },
  48 + .inherit_nodfrg = { 0, 1, 1 },
48 49 };
49 50  
50 51 /*
fs/xfs/linux-2.6/xfs_linux.h
... ... @@ -134,6 +134,7 @@
134 134 #define xfs_buf_age_centisecs xfs_params.xfs_buf_age.val
135 135 #define xfs_inherit_nosymlinks xfs_params.inherit_nosym.val
136 136 #define xfs_rotorstep xfs_params.rotorstep.val
  137 +#define xfs_inherit_nodefrag xfs_params.inherit_nodfrg.val
137 138  
138 139 #ifndef raw_smp_processor_id
139 140 #define raw_smp_processor_id() smp_processor_id()
fs/xfs/linux-2.6/xfs_sysctl.c
... ... @@ -120,6 +120,11 @@
120 120 &sysctl_intvec, NULL,
121 121 &xfs_params.rotorstep.min, &xfs_params.rotorstep.max},
122 122  
  123 + {XFS_INHERIT_NODFRG, "inherit_nodefrag", &xfs_params.inherit_nodfrg.val,
  124 + sizeof(int), 0644, NULL, &proc_dointvec_minmax,
  125 + &sysctl_intvec, NULL,
  126 + &xfs_params.inherit_nodfrg.min, &xfs_params.inherit_nodfrg.max},
  127 +
123 128 /* please keep this the last entry */
124 129 #ifdef CONFIG_PROC_FS
125 130 {XFS_STATS_CLEAR, "stats_clear", &xfs_params.stats_clear.val,
fs/xfs/linux-2.6/xfs_sysctl.h
... ... @@ -46,6 +46,7 @@
46 46 xfs_sysctl_val_t xfs_buf_age; /* Metadata buffer age before flush. */
47 47 xfs_sysctl_val_t inherit_nosym; /* Inherit the "nosymlinks" flag. */
48 48 xfs_sysctl_val_t rotorstep; /* inode32 AG rotoring control knob */
  49 + xfs_sysctl_val_t inherit_nodfrg;/* Inherit the "nodefrag" inode flag. */
49 50 } xfs_param_t;
50 51  
51 52 /*
... ... @@ -84,6 +85,7 @@
84 85 /* XFS_IO_BYPASS = 18 */
85 86 XFS_INHERIT_NOSYM = 19,
86 87 XFS_ROTORSTEP = 20,
  88 + XFS_INHERIT_NODFRG = 21,
87 89 };
88 90  
89 91 extern xfs_param_t xfs_params;
... ... @@ -257,6 +257,7 @@
257 257 #define XFS_DIFLAG_NOSYMLINKS_BIT 10 /* disallow symlink creation */
258 258 #define XFS_DIFLAG_EXTSIZE_BIT 11 /* inode extent size allocator hint */
259 259 #define XFS_DIFLAG_EXTSZINHERIT_BIT 12 /* inherit inode extent size */
  260 +#define XFS_DIFLAG_NODEFRAG_BIT 13 /* do not reorganize/defragment */
260 261 #define XFS_DIFLAG_REALTIME (1 << XFS_DIFLAG_REALTIME_BIT)
261 262 #define XFS_DIFLAG_PREALLOC (1 << XFS_DIFLAG_PREALLOC_BIT)
262 263 #define XFS_DIFLAG_NEWRTBM (1 << XFS_DIFLAG_NEWRTBM_BIT)
263 264  
... ... @@ -270,13 +271,14 @@
270 271 #define XFS_DIFLAG_NOSYMLINKS (1 << XFS_DIFLAG_NOSYMLINKS_BIT)
271 272 #define XFS_DIFLAG_EXTSIZE (1 << XFS_DIFLAG_EXTSIZE_BIT)
272 273 #define XFS_DIFLAG_EXTSZINHERIT (1 << XFS_DIFLAG_EXTSZINHERIT_BIT)
  274 +#define XFS_DIFLAG_NODEFRAG (1 << XFS_DIFLAG_NODEFRAG_BIT)
273 275  
274 276 #define XFS_DIFLAG_ANY \
275 277 (XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \
276 278 XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
277 279 XFS_DIFLAG_NOATIME | XFS_DIFLAG_NODUMP | XFS_DIFLAG_RTINHERIT | \
278 280 XFS_DIFLAG_PROJINHERIT | XFS_DIFLAG_NOSYMLINKS | XFS_DIFLAG_EXTSIZE | \
279   - XFS_DIFLAG_EXTSZINHERIT)
  281 + XFS_DIFLAG_EXTSZINHERIT | XFS_DIFLAG_NODEFRAG)
280 282  
281 283 #endif /* __XFS_DINODE_H__ */
... ... @@ -67,6 +67,7 @@
67 67 #define XFS_XFLAG_NOSYMLINKS 0x00000400 /* disallow symlink creation */
68 68 #define XFS_XFLAG_EXTSIZE 0x00000800 /* extent size allocator hint */
69 69 #define XFS_XFLAG_EXTSZINHERIT 0x00001000 /* inherit inode extent size */
  70 +#define XFS_XFLAG_NODEFRAG 0x00002000 /* do not defragment */
70 71 #define XFS_XFLAG_HASATTR 0x80000000 /* no DIFLAG for this */
71 72  
72 73 /*
... ... @@ -812,6 +812,8 @@
812 812 flags |= XFS_XFLAG_EXTSIZE;
813 813 if (di_flags & XFS_DIFLAG_EXTSZINHERIT)
814 814 flags |= XFS_XFLAG_EXTSZINHERIT;
  815 + if (di_flags & XFS_DIFLAG_NODEFRAG)
  816 + flags |= XFS_XFLAG_NODEFRAG;
815 817 }
816 818  
817 819 return flags;
... ... @@ -1221,6 +1223,9 @@
1221 1223 di_flags |= XFS_DIFLAG_NOSYMLINKS;
1222 1224 if (pip->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
1223 1225 di_flags |= XFS_DIFLAG_PROJINHERIT;
  1226 + if ((pip->i_d.di_flags & XFS_DIFLAG_NODEFRAG) &&
  1227 + xfs_inherit_nodefrag)
  1228 + di_flags |= XFS_DIFLAG_NODEFRAG;
1224 1229 ip->i_d.di_flags |= di_flags;
1225 1230 }
1226 1231 /* FALLTHROUGH */
fs/xfs/xfs_vnodeops.c
... ... @@ -799,6 +799,8 @@
799 799 di_flags |= XFS_DIFLAG_NODUMP;
800 800 if (vap->va_xflags & XFS_XFLAG_PROJINHERIT)
801 801 di_flags |= XFS_DIFLAG_PROJINHERIT;
  802 + if (vap->va_xflags & XFS_XFLAG_NODEFRAG)
  803 + di_flags |= XFS_DIFLAG_NODEFRAG;
802 804 if ((ip->i_d.di_mode & S_IFMT) == S_IFDIR) {
803 805 if (vap->va_xflags & XFS_XFLAG_RTINHERIT)
804 806 di_flags |= XFS_DIFLAG_RTINHERIT;