diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2008-11-20 08:39:47 -0500 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2009-01-05 02:39:09 -0500 |
commit | 97cc1025b1a91c52e84f12478dcf0f853abc6564 (patch) | |
tree | cd71419049aeb13eea7012889d0ee0c715394e4d /fs/gfs2/mount.c | |
parent | 9ac1b4d9b6f885ccd7d8f56bceb609003a920ff7 (diff) |
GFS2: Kill two daemons with one patch
This patch removes the two daemons, gfs2_scand and gfs2_glockd
and replaces them with a shrinker which is called from the VM.
The net result is that GFS2 responds better when there is memory
pressure, since it shrinks the glock cache at the same rate
as the VFS shrinks the dcache and icache. There are no longer
any time based criteria for shrinking glocks, they are kept
until such time as the VM asks for more memory and then we
demote just as many glocks as required.
There are potential future changes to this code, including the
possibility of sorting the glocks which are to be written back
into inode number order, to get a better I/O ordering. It would
be very useful to have an elevator based workqueue implementation
for this, as that would automatically deal with the read I/O cases
at the same time.
This patch is my answer to Andrew Morton's remark, made during
the initial review of GFS2, asking why GFS2 needs so many kernel
threads, the answer being that it doesn't :-) This patch is a
net loss of about 200 lines of code.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/mount.c')
-rw-r--r-- | fs/gfs2/mount.c | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/fs/gfs2/mount.c b/fs/gfs2/mount.c index f96eb90a2cfa..8c0f16e301f6 100644 --- a/fs/gfs2/mount.c +++ b/fs/gfs2/mount.c | |||
@@ -32,7 +32,6 @@ enum { | |||
32 | Opt_debug, | 32 | Opt_debug, |
33 | Opt_nodebug, | 33 | Opt_nodebug, |
34 | Opt_upgrade, | 34 | Opt_upgrade, |
35 | Opt_num_glockd, | ||
36 | Opt_acl, | 35 | Opt_acl, |
37 | Opt_noacl, | 36 | Opt_noacl, |
38 | Opt_quota_off, | 37 | Opt_quota_off, |
@@ -57,7 +56,6 @@ static const match_table_t tokens = { | |||
57 | {Opt_debug, "debug"}, | 56 | {Opt_debug, "debug"}, |
58 | {Opt_nodebug, "nodebug"}, | 57 | {Opt_nodebug, "nodebug"}, |
59 | {Opt_upgrade, "upgrade"}, | 58 | {Opt_upgrade, "upgrade"}, |
60 | {Opt_num_glockd, "num_glockd=%d"}, | ||
61 | {Opt_acl, "acl"}, | 59 | {Opt_acl, "acl"}, |
62 | {Opt_noacl, "noacl"}, | 60 | {Opt_noacl, "noacl"}, |
63 | {Opt_quota_off, "quota=off"}, | 61 | {Opt_quota_off, "quota=off"}, |
@@ -96,7 +94,6 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, char *data_arg, int remount) | |||
96 | spin_unlock(&gfs2_sys_margs_lock); | 94 | spin_unlock(&gfs2_sys_margs_lock); |
97 | 95 | ||
98 | /* Set some defaults */ | 96 | /* Set some defaults */ |
99 | args->ar_num_glockd = GFS2_GLOCKD_DEFAULT; | ||
100 | args->ar_quota = GFS2_QUOTA_DEFAULT; | 97 | args->ar_quota = GFS2_QUOTA_DEFAULT; |
101 | args->ar_data = GFS2_DATA_DEFAULT; | 98 | args->ar_data = GFS2_DATA_DEFAULT; |
102 | } | 99 | } |
@@ -105,7 +102,7 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, char *data_arg, int remount) | |||
105 | process them */ | 102 | process them */ |
106 | 103 | ||
107 | for (options = data; (o = strsep(&options, ",")); ) { | 104 | for (options = data; (o = strsep(&options, ",")); ) { |
108 | int token, option; | 105 | int token; |
109 | substring_t tmp[MAX_OPT_ARGS]; | 106 | substring_t tmp[MAX_OPT_ARGS]; |
110 | 107 | ||
111 | if (!*o) | 108 | if (!*o) |
@@ -196,22 +193,6 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, char *data_arg, int remount) | |||
196 | goto cant_remount; | 193 | goto cant_remount; |
197 | args->ar_upgrade = 1; | 194 | args->ar_upgrade = 1; |
198 | break; | 195 | break; |
199 | case Opt_num_glockd: | ||
200 | if ((error = match_int(&tmp[0], &option))) { | ||
201 | fs_info(sdp, "problem getting num_glockd\n"); | ||
202 | goto out_error; | ||
203 | } | ||
204 | |||
205 | if (remount && option != args->ar_num_glockd) | ||
206 | goto cant_remount; | ||
207 | if (!option || option > GFS2_GLOCKD_MAX) { | ||
208 | fs_info(sdp, "0 < num_glockd <= %u (not %u)\n", | ||
209 | GFS2_GLOCKD_MAX, option); | ||
210 | error = -EINVAL; | ||
211 | goto out_error; | ||
212 | } | ||
213 | args->ar_num_glockd = option; | ||
214 | break; | ||
215 | case Opt_acl: | 196 | case Opt_acl: |
216 | args->ar_posix_acl = 1; | 197 | args->ar_posix_acl = 1; |
217 | sdp->sd_vfs->s_flags |= MS_POSIXACL; | 198 | sdp->sd_vfs->s_flags |= MS_POSIXACL; |