aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/mount.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2009-02-09 04:25:01 -0500
committerSteven Whitehouse <steve@dolmen.chygwyn.com>2009-03-24 07:21:20 -0400
commitf15ab5619d8068a321094f4705147764d689e88e (patch)
treec08044e928dff4628b0aa6ea17d6bc5fb922d5dc /fs/gfs2/mount.c
parentd8348de06f704fc34d24ec068546ecb1045fc11a (diff)
GFS2: Support generation of discard requests
This patch allows GFS2 to generate discard requests for blocks which are no longer useful to the filesystem (i.e. those which have been freed as the result of an unlink operation). The requests are generated at the time which those blocks become available for reuse in the filesystem. In order to use this new feature, you have to specify the "discard" mount option. The code coalesces adjacent blocks into a single extent when generating the discard requests, thus generating the minimum number. If an error occurs when the request has been sent to the block device, then it will print a message and turn off the requests for that filesystem. If the problem is temporary, then you can use remount to turn the option back on again. There is also a nodiscard mount option so that you can use remount to turn discard requests off, if required. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/mount.c')
-rw-r--r--fs/gfs2/mount.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/gfs2/mount.c b/fs/gfs2/mount.c
index fba502aa8b2d..ee69701a7777 100644
--- a/fs/gfs2/mount.c
+++ b/fs/gfs2/mount.c
@@ -41,6 +41,8 @@ enum {
41 Opt_data_writeback, 41 Opt_data_writeback,
42 Opt_data_ordered, 42 Opt_data_ordered,
43 Opt_meta, 43 Opt_meta,
44 Opt_discard,
45 Opt_nodiscard,
44 Opt_err, 46 Opt_err,
45}; 47};
46 48
@@ -65,6 +67,8 @@ static const match_table_t tokens = {
65 {Opt_data_writeback, "data=writeback"}, 67 {Opt_data_writeback, "data=writeback"},
66 {Opt_data_ordered, "data=ordered"}, 68 {Opt_data_ordered, "data=ordered"},
67 {Opt_meta, "meta"}, 69 {Opt_meta, "meta"},
70 {Opt_discard, "discard"},
71 {Opt_nodiscard, "nodiscard"},
68 {Opt_err, NULL} 72 {Opt_err, NULL}
69}; 73};
70 74
@@ -157,6 +161,12 @@ int gfs2_mount_args(struct gfs2_sbd *sdp, struct gfs2_args *args, char *options)
157 case Opt_meta: 161 case Opt_meta:
158 args->ar_meta = 1; 162 args->ar_meta = 1;
159 break; 163 break;
164 case Opt_discard:
165 args->ar_discard = 1;
166 break;
167 case Opt_nodiscard:
168 args->ar_discard = 0;
169 break;
160 case Opt_err: 170 case Opt_err:
161 default: 171 default:
162 fs_info(sdp, "invalid mount option: %s\n", o); 172 fs_info(sdp, "invalid mount option: %s\n", o);