From: Steven Whitehouse <swhiteho@redhat.com>
To: linux-kernel@vger.kernel.org, cluster-devel@redhat.com
Cc: Abhijith Das <adas@redhat.com>, Steven Whitehouse <swhiteho@redhat.com>
Subject: [PATCH 11/12] GFS2: Fix fstrim boundary conditions
Date: Mon, 1 Jul 2013 10:33:14 +0100 [thread overview]
Message-ID: <1372671195-3472-12-git-send-email-swhiteho@redhat.com> (raw)
In-Reply-To: <1372671195-3472-1-git-send-email-swhiteho@redhat.com>
From: Abhijith Das <adas@redhat.com>
This patch correctly distinguishes two boundary conditions:
1. When the given range is entire within the unaccounted space between
two rgrps, and
2. The range begins beyond the end of the filesystem
Also fix the unit of the returned value r.len (total trimming) to be in bytes
instead of the (incorrect) 512 byte blocks
With this patch, GFS2 passes multiple iterations of all the relevant xfstests
(251, 260, 288) with different fs block sizes.
Signed-off-by: Abhi Das <adas@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
index 9809156..6931743 100644
--- a/fs/gfs2/rgrp.c
+++ b/fs/gfs2/rgrp.c
@@ -1288,13 +1288,15 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
minlen = max_t(u64, r.minlen,
q->limits.discard_granularity) >> bs_shift;
+ if (end <= start || minlen > sdp->sd_max_rg_data)
+ return -EINVAL;
+
rgd = gfs2_blk2rgrpd(sdp, start, 0);
- rgd_end = gfs2_blk2rgrpd(sdp, end - 1, 0);
+ rgd_end = gfs2_blk2rgrpd(sdp, end, 0);
- if (end <= start ||
- minlen > sdp->sd_max_rg_data ||
- start > rgd_end->rd_data0 + rgd_end->rd_data)
- return -EINVAL;
+ if ((gfs2_rgrpd_get_first(sdp) == gfs2_rgrpd_get_next(rgd_end))
+ && (start > rgd_end->rd_data0 + rgd_end->rd_data))
+ return -EINVAL; /* start is beyond the end of the fs */
while (1) {
@@ -1336,7 +1338,7 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
}
out:
- r.len = trimmed << 9;
+ r.len = trimmed << bs_shift;
if (copy_to_user(argp, &r, sizeof(r)))
return -EFAULT;
--
1.7.4
next prev parent reply other threads:[~2013-07-01 10:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 9:33 GFS2: Pre-pull patch posting (merge window) Steven Whitehouse
2013-07-01 9:33 ` [PATCH 01/12] GFS2: Sort buffer lists by inplace block number Steven Whitehouse
2013-07-01 9:33 ` [PATCH 02/12] GFS2: Eliminate gfs2_rg_lops Steven Whitehouse
2013-07-01 9:33 ` [PATCH 03/12] GFS2: Cocci spatch "ptr_ret.spatch" Steven Whitehouse
2013-07-01 9:33 ` [PATCH 04/12] GFS2: Remove no-op wrapper function Steven Whitehouse
2013-07-01 9:33 ` [PATCH 05/12] GFS2: fix error propagation in init_threads() Steven Whitehouse
2013-07-01 9:33 ` [PATCH 06/12] GFS2: Only do one directory search on create Steven Whitehouse
2013-07-01 9:33 ` [PATCH 07/12] GFS2: Add atomic_open support Steven Whitehouse
2013-07-01 9:33 ` [PATCH 08/12] GFS2: fix regression in dir_double_exhash Steven Whitehouse
2013-07-01 9:33 ` [PATCH 09/12] GFS2: aggressively issue revokes in gfs2_log_flush Steven Whitehouse
2013-07-01 9:33 ` [PATCH 10/12] GFS2: fix warning message Steven Whitehouse
2013-07-01 9:33 ` Steven Whitehouse [this message]
2013-07-01 9:33 ` [PATCH 12/12] GFS2: Reserve journal space for quota change in do_grow Steven Whitehouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372671195-3472-12-git-send-email-swhiteho@redhat.com \
--to=swhiteho@redhat.com \
--cc=adas@redhat.com \
--cc=cluster-devel@redhat.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®