Commit 622db1ad authored by Geoffrey Wehrman's avatar Geoffrey Wehrman Committed by Linus Torvalds

[XFS] Add xfs_rotorstep sysctl for controlling placement of extents for

new files by the inode32 allocator.

SGI-PV: 912624
SGI-Modid: xfs-linux:xfs-kern:181032a
Signed-off-by: default avatarGeoffrey Wehrman <gwehrman@sgi.com>
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
parent d8bdd99e
...@@ -64,6 +64,7 @@ xfs_param_t xfs_params = { ...@@ -64,6 +64,7 @@ xfs_param_t xfs_params = {
.xfs_buf_timer = { 100/2, 1*100, 30*100 }, .xfs_buf_timer = { 100/2, 1*100, 30*100 },
.xfs_buf_age = { 1*100, 15*100, 7200*100}, .xfs_buf_age = { 1*100, 15*100, 7200*100},
.inherit_nosym = { 0, 0, 1 }, .inherit_nosym = { 0, 0, 1 },
.rotorstep = { 1, 1, 255 },
}; };
/* /*
......
...@@ -142,6 +142,7 @@ static inline void set_buffer_unwritten_io(struct buffer_head *bh) ...@@ -142,6 +142,7 @@ static inline void set_buffer_unwritten_io(struct buffer_head *bh)
#define xfs_buf_timer_centisecs xfs_params.xfs_buf_timer.val #define xfs_buf_timer_centisecs xfs_params.xfs_buf_timer.val
#define xfs_buf_age_centisecs xfs_params.xfs_buf_age.val #define xfs_buf_age_centisecs xfs_params.xfs_buf_age.val
#define xfs_inherit_nosymlinks xfs_params.inherit_nosym.val #define xfs_inherit_nosymlinks xfs_params.inherit_nosym.val
#define xfs_rotorstep xfs_params.rotorstep.val
#define current_cpu() smp_processor_id() #define current_cpu() smp_processor_id()
#define current_pid() (current->pid) #define current_pid() (current->pid)
......
...@@ -134,6 +134,11 @@ STATIC ctl_table xfs_table[] = { ...@@ -134,6 +134,11 @@ STATIC ctl_table xfs_table[] = {
&sysctl_intvec, NULL, &sysctl_intvec, NULL,
&xfs_params.inherit_nosym.min, &xfs_params.inherit_nosym.max}, &xfs_params.inherit_nosym.min, &xfs_params.inherit_nosym.max},
{XFS_ROTORSTEP, "rotorstep", &xfs_params.rotorstep.val,
sizeof(int), 0644, NULL, &proc_dointvec_minmax,
&sysctl_intvec, NULL,
&xfs_params.rotorstep.min, &xfs_params.rotorstep.max},
/* please keep this the last entry */ /* please keep this the last entry */
#ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS
{XFS_STATS_CLEAR, "stats_clear", &xfs_params.stats_clear.val, {XFS_STATS_CLEAR, "stats_clear", &xfs_params.stats_clear.val,
......
...@@ -60,6 +60,7 @@ typedef struct xfs_param { ...@@ -60,6 +60,7 @@ typedef struct xfs_param {
xfs_sysctl_val_t xfs_buf_timer; /* Interval between xfsbufd wakeups. */ xfs_sysctl_val_t xfs_buf_timer; /* Interval between xfsbufd wakeups. */
xfs_sysctl_val_t xfs_buf_age; /* Metadata buffer age before flush. */ xfs_sysctl_val_t xfs_buf_age; /* Metadata buffer age before flush. */
xfs_sysctl_val_t inherit_nosym; /* Inherit the "nosymlinks" flag. */ xfs_sysctl_val_t inherit_nosym; /* Inherit the "nosymlinks" flag. */
xfs_sysctl_val_t rotorstep; /* inode32 AG rotoring control knob */
} xfs_param_t; } xfs_param_t;
/* /*
...@@ -97,6 +98,7 @@ enum { ...@@ -97,6 +98,7 @@ enum {
XFS_BUF_AGE = 17, XFS_BUF_AGE = 17,
/* XFS_IO_BYPASS = 18 */ /* XFS_IO_BYPASS = 18 */
XFS_INHERIT_NOSYM = 19, XFS_INHERIT_NOSYM = 19,
XFS_ROTORSTEP = 20,
}; };
extern xfs_param_t xfs_params; extern xfs_param_t xfs_params;
......
...@@ -2247,6 +2247,7 @@ xfs_alloc_vextent( ...@@ -2247,6 +2247,7 @@ xfs_alloc_vextent(
xfs_alloctype_t type; /* input allocation type */ xfs_alloctype_t type; /* input allocation type */
int bump_rotor = 0; int bump_rotor = 0;
int no_min = 0; int no_min = 0;
xfs_agnumber_t rotorstep = xfs_rotorstep; /* inode32 agf stepper */
mp = args->mp; mp = args->mp;
type = args->otype = args->type; type = args->otype = args->type;
...@@ -2310,7 +2311,9 @@ xfs_alloc_vextent( ...@@ -2310,7 +2311,9 @@ xfs_alloc_vextent(
*/ */
if ((args->userdata == XFS_ALLOC_INITIAL_USER_DATA) && if ((args->userdata == XFS_ALLOC_INITIAL_USER_DATA) &&
(mp->m_flags & XFS_MOUNT_32BITINODES)) { (mp->m_flags & XFS_MOUNT_32BITINODES)) {
args->fsbno = XFS_AGB_TO_FSB(mp, mp->m_agfrotor, 0); args->fsbno = XFS_AGB_TO_FSB(mp,
((mp->m_agfrotor / rotorstep) %
mp->m_sb.sb_agcount), 0);
bump_rotor = 1; bump_rotor = 1;
} }
args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno);
...@@ -2326,7 +2329,8 @@ xfs_alloc_vextent( ...@@ -2326,7 +2329,8 @@ xfs_alloc_vextent(
/* /*
* Start with the last place we left off. * Start with the last place we left off.
*/ */
args->agno = sagno = mp->m_agfrotor; args->agno = sagno = (mp->m_agfrotor / rotorstep) %
mp->m_sb.sb_agcount;
args->type = XFS_ALLOCTYPE_THIS_AG; args->type = XFS_ALLOCTYPE_THIS_AG;
flags = XFS_ALLOC_FLAG_TRYLOCK; flags = XFS_ALLOC_FLAG_TRYLOCK;
} else if (type == XFS_ALLOCTYPE_FIRST_AG) { } else if (type == XFS_ALLOCTYPE_FIRST_AG) {
...@@ -2400,8 +2404,14 @@ xfs_alloc_vextent( ...@@ -2400,8 +2404,14 @@ xfs_alloc_vextent(
} }
} }
up_read(&mp->m_peraglock); up_read(&mp->m_peraglock);
if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) if (bump_rotor || (type == XFS_ALLOCTYPE_ANY_AG)) {
mp->m_agfrotor = (args->agno + 1) % mp->m_sb.sb_agcount; if (args->agno == sagno)
mp->m_agfrotor = (mp->m_agfrotor + 1) %
(mp->m_sb.sb_agcount * rotorstep);
else
mp->m_agfrotor = (args->agno * rotorstep + 1) %
(mp->m_sb.sb_agcount * rotorstep);
}
break; break;
default: default:
ASSERT(0); ASSERT(0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment