diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2009-02-09 04:25:01 -0500 |
---|---|---|
committer | Steven Whitehouse <steve@dolmen.chygwyn.com> | 2009-03-24 07:21:20 -0400 |
commit | f15ab5619d8068a321094f4705147764d689e88e (patch) | |
tree | c08044e928dff4628b0aa6ea17d6bc5fb922d5dc /fs/gfs2/mount.c | |
parent | d8348de06f704fc34d24ec068546ecb1045fc11a (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.c | 10 |
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); |