mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sasha Levin <Alexander.Levin@microsoft.com>
To: "stable@vger.kernel.org" <stable@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: Andreas Gruenbacher <agruenba@redhat.com>,
	Sasha Levin <Alexander.Levin@microsoft.com>
Subject: [PATCH AUTOSEL 3.18 04/19] gfs2: Special-case rindex for gfs2_grow
Date: Fri, 7 Sep 2018 00:39:28 +0000	[thread overview]
Message-ID: <20180907003923.58019-4-alexander.levin@microsoft.com> (raw)
In-Reply-To: <20180907003923.58019-1-alexander.levin@microsoft.com>

From: Andreas Gruenbacher <agruenba@redhat.com>

[ Upstream commit 776125785a87ff05d49938bd5b9f336f2a05bff6 ]

To speed up the common case of appending to a file,
gfs2_write_alloc_required presumes that writing beyond the end of a file
will always require additional blocks to be allocated.  This assumption
is incorrect for preallocates files, but there are no negative
consequences as long as *some* space is still left on the filesystem.

One special file that always has some space preallocated beyond the end
of the file is the rindex: when growing a filesystem, gfs2_grow adds one
or more new resource groups and appends records describing those
resource groups to the rindex; the preallocated space ensures that this
is always possible.

However, when a filesystem is completely full, gfs2_write_alloc_required
will indicate that an additional allocation is required, and appending
the next record to the rindex will fail even though space for that
record has already been preallocated.  To fix that, skip the incorrect
optimization in gfs2_write_alloc_required, but for the rindex only.
Other writes to preallocated space beyond the end of the file are still
allowed to fail on completely full filesystems.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
---
 fs/gfs2/bmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index f0b945ab853e..2f29c2a81448 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -1476,7 +1476,7 @@ int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
 	end_of_file = (i_size_read(&ip->i_inode) + sdp->sd_sb.sb_bsize - 1) >> shift;
 	lblock = offset >> shift;
 	lblock_stop = (offset + len + sdp->sd_sb.sb_bsize - 1) >> shift;
-	if (lblock_stop > end_of_file)
+	if (lblock_stop > end_of_file && ip != GFS2_I(sdp->sd_rindex))
 		return 1;
 
 	size = (lblock_stop - lblock) << shift;
-- 
2.17.1

  parent reply	other threads:[~2018-09-07  0:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-07  0:39 [PATCH AUTOSEL 3.18 01/19] ALSA: msnd: Fix the default sample sizes Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 02/19] ALSA: usb-audio: Fix multiple definitions in AU0828_DEVICE() macro Sasha Levin
2018-09-07  0:39 ` Sasha Levin [this message]
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 03/19] xfrm: fix 'passing zero to ERR_PTR()' warning Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 05/19] MIPS: ath79: fix system restart Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 06/19] mtd/maps: fix solutionengine.c printk format warnings Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 07/19] gfs2: Don't reject a supposedly full bitmap if we have blocks reserved Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 08/19] iio: ad9523: Fix displayed phase Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 09/19] fbdev: omapfb: off by one in omapfb_register_client() Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 10/19] video: goldfishfb: fix memory leak on driver remove Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 11/19] fbdev/via: fix defined but not used warning Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 12/19] perf powerpc: Fix callchain ip filtering when return address is in a register Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 13/19] fbdev: Distinguish between interlaced and progressive modes Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 14/19] perf powerpc: Fix callchain ip filtering Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 15/19] powerpc/powernv: opal_put_chars partial write fix Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 16/19] mac80211: restrict delayed tailroom needed decrement Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 17/19] s390/qeth: fix race in used-buffer accounting Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 18/19] s390/qeth: reset layer2 attribute on layer switch Sasha Levin
2018-09-07  0:39 ` [PATCH AUTOSEL 3.18 19/19] platform/x86: toshiba_acpi: Fix defined but not used build warnings Sasha Levin

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=20180907003923.58019-4-alexander.levin@microsoft.com \
    --to=alexander.levin@microsoft.com \
    --cc=agruenba@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@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

Powered by JetHome