From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
Zwane Mwaikambo <zwane@arm.linux.org.uk>,
"Theodore Ts'o" <tytso@mit.edu>,
Randy Dunlap <rdunlap@xenotime.net>,
Dave Jones <davej@redhat.com>,
Chuck Wolber <chuckw@quantumlinux.com>,
Chris Wedgwood <reviews@ml.cw.f00f.org>,
Michael Krufky <mkrufky@linuxtv.org>,
Chuck Ebbert <cebbert@redhat.com>,
Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
torvalds@linux-foundation.org, akpm@linux-foundation.org,
alan@lxorguk.ukuu.org.uk, linux-ext4@vger.kernel.org,
"Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Subject: [patch 31/39] ext4: Dont allow new groups to be added during block allocation
Date: Wed, 18 Feb 2009 13:33:12 -0800 [thread overview]
Message-ID: <20090218213312.GF19814@kroah.com> (raw)
In-Reply-To: <20090218213021.GA19814@kroah.com>
[-- Attachment #1: ext4-don-t-allow-new-groups-to-be-added-during-block-allocation.patch --]
[-- Type: text/plain, Size: 2885 bytes --]
2.6.28-stable review patch. If anyone has any objections, please let us know.
------------------
From: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
(cherry picked from commit 8556e8f3b6c4c11601ce1e9ea8090a6d8bd5daae)
After we mark the blocks in the buddy cache as allocated,
we need to ensure that we don't reinit the buddy cache until
the block bitmap is updated. This commit achieves this by holding
the group_info alloc_semaphore till ext4_mb_release_context
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
fs/ext4/mballoc.c | 16 +++++++++++++---
fs/ext4/mballoc.h | 5 +++++
2 files changed, 18 insertions(+), 3 deletions(-)
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -1052,7 +1052,8 @@ static void ext4_mb_release_desc(struct
if (e4b->bd_buddy_page)
page_cache_release(e4b->bd_buddy_page);
/* Done with the buddy cache */
- up_read(e4b->alloc_semp);
+ if (e4b->alloc_semp)
+ up_read(e4b->alloc_semp);
}
@@ -1372,7 +1373,9 @@ static void ext4_mb_use_best_found(struc
get_page(ac->ac_bitmap_page);
ac->ac_buddy_page = e4b->bd_buddy_page;
get_page(ac->ac_buddy_page);
-
+ /* on allocation we use ac to track the held semaphore */
+ ac->alloc_semp = e4b->alloc_semp;
+ e4b->alloc_semp = NULL;
/* store last allocated for subsequent stream allocation */
if ((ac->ac_flags & EXT4_MB_HINT_DATA)) {
spin_lock(&sbi->s_md_lock);
@@ -4286,6 +4289,7 @@ ext4_mb_initialize_context(struct ext4_a
ac->ac_pa = NULL;
ac->ac_bitmap_page = NULL;
ac->ac_buddy_page = NULL;
+ ac->alloc_semp = NULL;
ac->ac_lg = NULL;
/* we have to define context: we'll we work with a file or
@@ -4466,6 +4470,8 @@ static int ext4_mb_release_context(struc
}
ext4_mb_put_pa(ac, ac->ac_sb, pa);
}
+ if (ac->alloc_semp)
+ up_read(ac->alloc_semp);
if (ac->ac_bitmap_page)
page_cache_release(ac->ac_bitmap_page);
if (ac->ac_buddy_page)
@@ -4566,10 +4572,14 @@ repeat:
ac->ac_o_ex.fe_len < ac->ac_b_ex.fe_len)
ext4_mb_new_preallocation(ac);
}
-
if (likely(ac->ac_status == AC_STATUS_FOUND)) {
*errp = ext4_mb_mark_diskspace_used(ac, handle, reserv_blks);
if (*errp == -EAGAIN) {
+ /*
+ * drop the reference that we took
+ * in ext4_mb_use_best_found
+ */
+ ext4_mb_release_context(ac);
ac->ac_b_ex.fe_group = 0;
ac->ac_b_ex.fe_start = 0;
ac->ac_b_ex.fe_len = 0;
--- a/fs/ext4/mballoc.h
+++ b/fs/ext4/mballoc.h
@@ -216,6 +216,11 @@ struct ext4_allocation_context {
__u8 ac_op; /* operation, for history only */
struct page *ac_bitmap_page;
struct page *ac_buddy_page;
+ /*
+ * pointer to the held semaphore upon successful
+ * block allocation
+ */
+ struct rw_semaphore *alloc_semp;
struct ext4_prealloc_space *ac_pa;
struct ext4_locality_group *ac_lg;
};
next prev parent reply other threads:[~2009-02-18 21:48 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090218212144.965748151@mini.kroah.org>
2009-02-18 21:30 ` [patch 00/39] 2.6.28.7-stable review Greg KH
2009-02-18 21:32 ` [patch 01/39] pid: implement ns_of_pid Greg KH
2009-02-18 21:32 ` [patch 02/39] mqueue: fix si_pid value in mqueue do_notify() Greg KH
2009-02-18 21:32 ` [patch 03/39] WATCHDOG: iTCO_wdt: fix SMI_EN regression 2 Greg KH
2009-02-18 21:32 ` [patch 04/39] powerpc/vsx: Fix VSX alignment handler for regs 32-63 Greg KH
2009-02-18 21:32 ` [patch 05/39] sata_nv: give up hardreset on nf2 Greg KH
2009-03-03 23:53 ` Stefan Lippers-Hollmann
2009-03-04 2:12 ` Tejun Heo
2009-02-18 21:32 ` [patch 06/39] Fix Intel IOMMU write-buffer flushing Greg KH
2009-02-18 21:32 ` [patch 07/39] SCSI: libiscsi: fix iscsi pool leak Greg KH
2009-02-18 21:32 ` [patch 08/39] x86/cpa: make sure cpa is safe to call in lazy mmu mode Greg KH
2009-02-18 21:32 ` [patch 09/39] sched: SCHED_OTHER vs SCHED_IDLE isolation Greg KH
2009-02-18 21:32 ` [patch 10/39] x86, vm86: fix preemption bug Greg KH
2009-02-18 21:32 ` [patch 11/39] Add support for VT6415 PCIE PATA IDE Host Controller Greg KH
2009-02-18 21:32 ` [patch 12/39] ext2/xip: refuse to change xip flag during remount with busy inodes Greg KH
2009-02-18 21:32 ` [patch 13/39] 3c505: do not set pcb->data.raw beyond its size Greg KH
2009-02-18 21:32 ` [patch 14/39] Bluetooth: Fix TX error path in btsdio driver Greg KH
2009-02-18 21:32 ` [patch 15/39] ext4: Add support for non-native signed/unsigned htree hash algorithms Greg KH
2009-02-18 21:32 ` [patch 16/39] ext4: tone down ext4_da_writepages warnings Greg KH
2009-02-18 21:32 ` [patch 17/39] ext4: Fix the delalloc writepages to allocate blocks at the right offset Greg KH
2009-02-18 21:32 ` [patch 18/39] ext4: avoid ext4_error when mounting a fs with a single bg Greg KH
2009-02-18 21:32 ` [patch 19/39] ext4: Widen type of ext4_sb_info.s_mb_maxs[] Greg KH
2009-02-18 21:32 ` [patch 20/39] jbd2: Add barrier not supported test to journal_wait_on_commit_record Greg KH
2009-02-18 21:32 ` [patch 21/39] ext4: Dont overwrite allocation_context ac_status Greg KH
2009-02-18 21:32 ` [patch 22/39] ext4: Add blocks added during resize to bitmap Greg KH
2009-02-18 21:32 ` [patch 23/39] ext4: Use EXT4_GROUP_INFO_NEED_INIT_BIT during resize Greg KH
2009-02-18 21:32 ` [patch 24/39] ext4: cleanup mballoc header files Greg KH
2009-02-18 21:33 ` [patch 25/39] ext4: dont use blocks freed but not yet committed in buddy cache init Greg KH
2009-02-18 21:33 ` [patch 26/39] ext4: Fix race between read_block_bitmap() and mark_diskspace_used() Greg KH
2009-02-18 21:33 ` [patch 27/39] ext4: Fix the race between read_inode_bitmap() and ext4_new_inode() Greg KH
2009-02-18 21:33 ` [patch 28/39] jbd2: Add BH_JBDPrivateStart Greg KH
2009-02-18 21:33 ` [patch 29/39] ext4: Use new buffer_head flag to check uninit group bitmaps initialization Greg KH
2009-02-18 21:33 ` [patch 30/39] ext4: mark the blocks/inode bitmap beyond end of group as used Greg KH
2009-02-18 21:33 ` Greg KH [this message]
2009-02-18 21:33 ` [patch 32/39] ext4: Init the complete page while building buddy cache Greg KH
2009-02-18 21:33 ` [patch 33/39] ext4: Fix s_dirty_blocks_counter if block allocation failed with nodelalloc Greg KH
2009-02-18 21:33 ` [patch 34/39] ext4: Add sanity checks for the superblock before mounting the filesystem Greg KH
2009-02-18 21:33 ` [patch 35/39] ext4: only use i_size_high for regular files Greg KH
2009-02-18 21:33 ` [patch 36/39] ext4: Add sanity check to make_indexed_dir Greg KH
2009-02-18 21:33 ` [patch 37/39] jbd2: On a __journal_expect() assertion failure printk "JBD2", not "EXT3-fs" Greg KH
2009-02-18 21:33 ` [patch 38/39] ext4: Initialize the new group descriptor when resizing the filesystem Greg KH
2009-02-18 21:33 ` [patch 39/39] Fix longstanding "error: storage size of __mod_dmi_device_table isnt known" Greg KH
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=20090218213312.GF19814@kroah.com \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=cavokz@gmail.com \
--cc=cebbert@redhat.com \
--cc=chuckw@quantumlinux.com \
--cc=davej@redhat.com \
--cc=eteo@redhat.com \
--cc=jake@lwn.net \
--cc=jmforbes@linuxtx.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mkrufky@linuxtv.org \
--cc=rbranco@la.checkpoint.com \
--cc=rdunlap@xenotime.net \
--cc=reviews@ml.cw.f00f.org \
--cc=stable@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=w@1wt.eu \
--cc=zwane@arm.linux.org.uk \
/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