Commit d3446eac3f50dade2f09ed212b112609ee78fb33
Committed by
Nathan Scott
1 parent
fbc1462bcb
Exists in
master
and in
7 other branches
[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
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; |
fs/xfs/xfs_dinode.h
... | ... | @@ -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__ */ |
fs/xfs/xfs_fs.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 | /* |
fs/xfs/xfs_inode.c
... | ... | @@ -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; |