From: Hugh Dickins <hugh@veritas.com>
To: Mingming Cao <cmm@us.ibm.com>
Cc: Andrew Morton <akpm@osdl.org>, Mel Gorman <mel@skynet.ie>,
"Martin J. Bligh" <mbligh@mbligh.org>,
linux-kernel@vger.kernel.org,
"linux-ext4@vger.kernel.org" <linux-ext4@vger.kernel.org>
Subject: Re: [PATCH 1/6] ext2 balloc: fix _with_rsv freeze
Date: Tue, 28 Nov 2006 20:07:57 +0000 (GMT) [thread overview]
Message-ID: <Pine.LNX.4.64.0611281940170.4516@blonde.wat.veritas.com> (raw)
In-Reply-To: <1164741967.3769.27.camel@dyn9047017103.beaverton.ibm.com>
On Tue, 28 Nov 2006, Mingming Cao wrote:
> On Tue, 2006-11-28 at 17:40 +0000, Hugh Dickins wrote:
> > After several days of testing ext2 with reservations, it got caught inside
> > ext2_try_to_allocate_with_rsv: alloc_new_reservation repeatedly succeeding
> > on the window [12cff,12d0e], ext2_try_to_allocate repeatedly failing to
> > find the free block guaranteed to be included (unless there's contention).
> >
>
> Hmm, I suspect there is other issue: alloc_new_reservation should not
> repeatedly allocating the same window, if ext2_try_to_allocate
> repeatedly fails to find a free block in that window.
> find_next_reservable_window() takes my_rsv (the old window that he
> thinks there is no free block) as a guide to find a window "after" the
> end block of my_rsv, so how could this happen?
Hmmm. I haven't studied that part of the code, but what you say sounds
sensible: that would leave more to be explained, yes. I guess it would
happen if all the rest of the bitmap were either allocated or reserved,
but I don't believe that was the case here: I have noted that the map
was all 00s from offset 0x1ae onwards, plenty unallocated; I've not
recorded the following reservations, but it seems unlikely they covered
the remaining free area (and still covered it even when the remaining
tasks got to the point of just waiting for this one).
>
> > Fix the range to find_next_usable_block's memscan: the scan from "here"
> > (0xcfe) up to (but excluding) "maxblocks" (0xd0e) needs to scan 3 bytes
> > not 2 (the relevant bytes of bitmap in this case being f7 df ff - none
> > 00, but the premature cutoff implying that the last was found 00).
> >
>
> alloc_new_reservation() reserved a window with free block, when come to
> the time to claim it, it scans the window again. So it seems that the
> range of the the scan is too small:
The range of the scan is 1 byte too small in this case, yes.
>
> p = ((char *)bh->b_data) + (here >> 3);
> r = memscan(p, 0, (maxblocks - here + 7) >> 3);
> next = (r - ((char *)bh->b_data)) << 3;
>
> ---------------------> next is -1
I don't understand you: next was not -1, it was 0xd08.
> if (next < maxblocks && next >= here)
> return next;
>
> ----------------------> falls to false branch
No, it passed the "next < maxblocks && next >= here" test
(maxblocks being 0xd0e and here being 0xcfe), so returned
pointing to an allocated block - then the caller finds it
cannot set the bit.
>
> here = bitmap_search_next_usable_block(here, bh, maxblocks);
> return here;
>
> So we failed to find a free byte in the range. That's seems fine to me.
> It's only a nice thing to have -- try to allocate a block in a place
> where it's neighbors are all free also. If it fails, it will search the
> window bit by bit. So I don't understand why it is not being recovered
> by bitmap_search_next_usable_block(), which test the bitmap bit by bit?
It already returned, it doesn't reach that line.
>
> > Is this a problem for mainline ext2? No, because the "size" in its memscan
> > is always EXT2_BLOCKS_PER_GROUP(sb), which mkfs.ext2 requires to be a
> > multiple of 8. Is this a problem for ext3 or ext4? No, because they have
> > an additional extN_test_allocatable test which rescues them from the error.
> >
> Hmm, if the error is it prematurely think there is no free block in the
> range (bitmap on disk), then even in ext3/4, it will not bother checking
> the jbd copy of the bitmap. I am not sure this is the cause that ext3/4
> may not has the problem.
In the ext3/4 case, it indeed won't bother to check the jbd copy
(having found this bitmap bit set), it'll fall through to the
bitmap_search_next_usable_block you indicated above,
and that should do the right thing, finding the first
free bit in the area originally reserved.
>
> > But the bigger question is, why does the my_rsv case come here to
> > find_next_usable_block at all?
>
> Because grp_goal is -1?
Well, yes, but my point is that we've got a reservation, and we're
hoping to allocate from it (even though we've given up on the "goal"),
but find_next_usable_block is not respecting it at all - liable to be
allocating out of others' reservations instead.
>
> > Doesn't its 64-bit boundary limit, and its
> > memscan, blithely ignore what the reservation prepared?
>
> I agree with you that the double check is urgly. But it's necessary:( If
> there to prevent contention: other file make steal that free block we
> reserved for this file, in the case filesystem is full of reservation...
I agree it's necessary to recheck the allocation; I disagree that the
64-bit boundary limit and memscan are appropriate when my_rsv is set.
>
> > It's messy too,
> > the complement of the memscan being that "i < 7" loop over in
> > ext2_try_to_allocate. I think this ought to be cleaned up,
> > in ext2+reservations and ext3 and ext4.
> >
> The "i<7" loop there is for non reservation case. Since
> find_next_usable_block() could find a free byte, it's trying to avoid
> filesystem holes by shifting the start of the free block for at most 7
> times.
Yes, the "i<7" loop rightly has a !my_rsv check; my point it that it's
the "other end" of the memscan, which was operating 8-bits at a time,
which lacks any my_rsv check (doesn't even know my_rsv at that level).
Hugh
next prev parent reply other threads:[~2006-11-28 20:08 UTC|newest]
Thread overview: 185+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-14 9:41 2.6.19-rc5-mm2 Andrew Morton
2006-11-14 11:11 ` 2.6.19-rc5-mm2 Jiri Slaby
2006-11-14 11:54 ` 2.6.19-rc5-mm2 Jiri Slaby
2006-11-14 11:31 ` 2.6.19-rc5-mm2 Reuben Farrelly
2006-11-14 17:00 ` 2.6.19-rc5-mm2 Gautham R Shenoy
2006-11-14 20:58 ` 2.6.19-rc5-mm2 Mattia Dongili
2006-11-15 10:34 ` 2.6.19-rc5-mm2 Gautham R Shenoy
2006-11-15 10:42 ` 2.6.19-rc5-mm2 Reuben Farrelly
2006-11-14 12:46 ` 2.6.19-rc5-mm2 Mariusz Kozlowski
2006-11-14 13:07 ` 2.6.19-rc5-mm2 Mariusz Kozlowski
2006-11-14 16:41 ` 2.6.19-rc5-mm2 Andrew Morton
2006-11-14 17:09 ` 2.6.19-rc5-mm2 Andrew Morton
2006-11-14 19:23 ` 2.6.19-rc5-mm2 Mariusz Kozlowski
2006-11-14 13:50 ` 2.6.19-rc5-mm2 Eric Dumazet
2006-11-14 18:33 ` [-mm patch] fix the DLM dependencies Adrian Bunk
2006-11-14 22:56 ` [-mm patch] fix the DLM dependencies, part 2 Adrian Bunk
2006-11-15 10:11 ` Patrick Caulfield
2006-11-15 10:23 ` Adrian Bunk
2006-11-14 18:49 ` Boot failure with ext2 and initrds Mel Gorman
2006-11-14 19:08 ` Martin Bligh
2006-11-14 19:11 ` Hugh Dickins
2006-11-14 19:21 ` Martin Bligh
2006-11-14 20:20 ` Hugh Dickins
2006-11-14 20:30 ` Martin Bligh
2006-11-14 19:31 ` Andrew Morton
2006-11-14 21:18 ` Hugh Dickins
2006-11-14 21:19 ` Martin Bligh
2006-11-15 14:17 ` Hugh Dickins
2006-11-15 15:32 ` Martin J. Bligh
2006-11-15 15:56 ` Hugh Dickins
2006-11-16 5:45 ` Andrew Morton
2006-11-16 6:39 ` Andrew Morton
2006-11-16 6:55 ` Mingming Cao
2006-11-16 7:22 ` Andrew Morton
2006-11-16 8:49 ` Mingming Cao
2006-11-16 9:13 ` Andrew Morton
2006-11-16 9:37 ` Alex Tomas
2006-11-16 9:48 ` Andrew Morton
2006-11-16 9:49 ` Andrew Morton
2006-11-16 16:26 ` Hugh Dickins
2006-11-16 20:15 ` Mingming Cao
2006-11-16 21:27 ` Andrew Morton
2006-11-20 16:19 ` Hugh Dickins
2006-11-20 20:54 ` Hugh Dickins
2006-11-21 1:36 ` Mingming Cao
2006-11-21 1:47 ` Mingming Cao
2006-11-21 5:39 ` Hugh Dickins
2006-11-22 0:43 ` Mingming Cao
2006-11-28 17:38 ` Hugh Dickins
2006-11-28 17:40 ` [PATCH 1/6] ext2 balloc: fix _with_rsv freeze Hugh Dickins
2006-11-28 19:26 ` Mingming Cao
2006-11-28 20:07 ` Hugh Dickins [this message]
2006-11-29 0:42 ` Mingming Cao
2006-11-29 4:14 ` [PATCH 6/12] " Mingming Cao
2006-11-29 4:15 ` [PATCH 12/12] ext3 " Mingming Cao
2006-11-28 17:40 ` [PATCH 2/6] ext2 balloc: reset windowsz when full Hugh Dickins
2006-11-28 19:36 ` Mingming Cao
2006-11-29 4:14 ` [PATCH 2/12] ext3 balloc: fix off-by-one against grp_goal Mingming Cao
2006-11-29 4:15 ` [PATCH 8/12] ext4 " Mingming Cao
2006-11-28 17:41 ` [PATCH 3/6] ext2 balloc: fix off-by-one against rsv_end Hugh Dickins
2006-11-28 19:42 ` Mingming Cao
2006-11-28 17:42 ` [PATCH 4/6] ext2 balloc: fix off-by-one against grp_goal Hugh Dickins
2006-11-28 23:30 ` Mingming Cao
2006-11-29 4:13 ` [PATCH 1/12] ext3 balloc: reset windowsz when full Mingming Cao
2006-11-29 5:46 ` Hugh Dickins
2006-11-29 4:14 ` [PATCH 3/12] ext3 balloc: fix off-by-one against rsv_end Mingming Cao
2006-11-29 4:14 ` [PATCH 7/12] ext4 balloc: reset windowsz when full Mingming Cao
2006-11-29 4:15 ` [PATCH 9/12] ext4 balloc: fix off-by-one against rsv_end Mingming Cao
2006-11-28 17:43 ` [PATCH 5/6] ext2 balloc: say rb_entry not list_entry Hugh Dickins
2006-11-28 23:30 ` Mingming Cao
2006-11-29 4:14 ` [PATCH 4/12] ext3 " Mingming Cao
2006-11-29 4:15 ` [PATCH 10/12] ext4 " Mingming Cao
2006-11-28 17:44 ` [PATCH 6/6] ext2 balloc: use io_error label Hugh Dickins
2006-11-28 23:31 ` Mingming Cao
2006-11-29 4:14 ` [PATCH 5/12] ext3 " Mingming Cao
2006-11-29 4:15 ` [PATCH 11/12] ext4 " Mingming Cao
2006-11-28 21:04 ` Boot failure with ext2 and initrds Mingming Cao
2006-11-28 22:33 ` Andrew Morton
2006-11-28 23:38 ` Mingming Cao
2006-11-16 12:34 ` Russell King
2006-11-25 14:59 ` Russell King
2006-11-29 7:40 ` Russell King
2006-11-29 8:30 ` Andrew Morton
2006-11-29 9:20 ` Russell King
2006-11-29 9:39 ` Andrew Morton
2006-11-29 18:16 ` Russell King
2006-11-14 21:19 ` Mel Gorman
2006-11-15 0:25 ` Andy Whitcroft
2006-11-15 0:58 ` Andrew Morton
2006-11-15 23:54 ` Andy Whitcroft
2006-11-16 9:05 ` Mingming Cao
2006-11-14 20:02 ` 2.6.19-rc5-mm2: no help text for FAULT_INJECTION Adrian Bunk
2006-11-14 21:12 ` [PATCH -mm] CONFIG_FAULT_INJECTION help text Akinobu Mita
2006-11-14 21:15 ` [PATCH -mm] failslab: remove __GFP_HIGHMEM filtering Akinobu Mita
2006-11-14 22:56 ` 2.6.19-rc5-mm2: warnings in MODPOST and later Adrian Bunk
2006-11-14 23:09 ` Andrew Morton
2006-11-15 7:42 ` Arjan van de Ven
2006-11-14 23:13 ` and in www.kernel.org page? Re: 2.6.19-rc5-mm2 Sergio Monteiro Basto
2006-11-15 23:16 ` 2.6.19-rc5-mm2: paravirt X86_PAE=y compile error Adrian Bunk
2006-11-15 23:36 ` Andrew Morton
2006-11-16 1:30 ` Zachary Amsden
2006-11-16 2:27 ` Chris Wright
2006-11-16 7:05 ` Andi Kleen
2006-11-28 23:36 ` Randy Dunlap
2006-11-16 12:16 ` [-mm patch] remove arch/i386/kernel/time_hpet.c:hpet_reenable() Adrian Bunk
2006-11-16 17:17 ` 2.6.19-rc5-mm2 Mattia Dongili
2006-11-16 18:29 ` 2.6.19-rc5-mm2 Stefan Richter
2006-11-16 20:39 ` 2.6.19-rc5-mm2 Mattia Dongili
2006-11-16 22:50 ` 2.6.19-rc5-mm2 Stefan Richter
2006-11-17 7:16 ` 2.6.19-rc5-mm2 Mattia Dongili
2006-11-17 15:02 ` 2.6.19-rc5-mm2 Stefan Richter
2006-11-17 15:24 ` 2.6.19-rc5-mm2 (Oops in class_device_remove_attrs during nodemgr_remove_host) Stefan Richter
2006-11-18 9:47 ` Greg KH
2006-11-18 11:27 ` Stefan Richter
2006-11-18 17:07 ` Stefan Richter
2006-11-18 21:45 ` Stefan Richter
2006-11-18 22:08 ` Stefan Richter
2006-11-19 8:56 ` Mattia Dongili
2006-11-19 16:22 ` ohci1394 oops bisected [was Re: 2.6.19-rc5-mm2 (Oops in class_device_remove_attrs during nodemgr_remove_host)] Mattia Dongili
2006-11-19 17:13 ` Stefan Richter
2006-11-19 20:33 ` Andrew Morton
2006-11-19 21:01 ` Stefan Richter
2006-11-24 8:41 ` Greg KH
2006-11-24 17:13 ` Stefan Richter
2006-11-19 17:14 ` Gene Heskett
2006-11-19 18:07 ` Kino segfault (was Re: ohci1394 oops bisected) Stefan Richter
2006-11-19 20:11 ` Gene Heskett
2006-11-17 1:19 ` [-mm patch] crypto/xcbc.c: make some code static Adrian Bunk
2006-11-17 2:44 ` Herbert Xu
2006-11-17 1:19 ` [-mm patch] make drivers/acpi/bay.c:drive_bays static Adrian Bunk
2006-11-17 1:19 ` [-mm patch] make drivers/base/core.c:setup_parent() static Adrian Bunk
2006-11-17 1:19 ` [-mm patch] make geode_aes_crypt() static Adrian Bunk
2006-11-17 12:42 ` -mm: cx88-blackbird.c: unused code re-added Adrian Bunk
2006-11-17 13:53 ` [v4l-dvb-maintainer] " Michael Krufky
2006-11-17 14:13 ` Mauro Carvalho Chehab
2006-11-17 14:21 ` [-mm patch] drivers/media/video/cafe_ccic.c: make a function static Adrian Bunk
2006-11-17 14:21 ` [-mm patch] remove drivers/pci/search.c:pci_find_device_reverse() Adrian Bunk
2006-11-17 14:32 ` Alan Cox
2006-11-18 0:06 ` [2.6 patch] mark pci_find_device() as __deprecated Adrian Bunk
2006-11-18 1:42 ` Alan
2006-11-19 9:47 ` Arjan van de Ven
2006-11-19 9:52 ` Muli Ben-Yehuda
2006-11-19 10:01 ` Arjan van de Ven
2006-11-19 14:06 ` Adrian Bunk
2006-11-19 15:24 ` Muli Ben-Yehuda
2006-11-19 15:49 ` Adrian Bunk
2006-11-19 16:50 ` Arjan van de Ven
2006-11-19 14:04 ` Adrian Bunk
2006-11-19 14:13 ` Arjan van de Ven
2006-11-19 14:27 ` Adrian Bunk
2006-11-17 19:54 ` [-mm patch] remove drivers/pci/search.c:pci_find_device_reverse() Andrew Morton
2006-11-17 20:33 ` Adrian Bunk
2006-11-17 22:16 ` Alan Cox
2006-11-19 9:44 ` Arjan van de Ven
2006-11-17 17:02 ` [-mm patch] make net/core/skbuff.c:skb_over_panic() static Adrian Bunk
2006-11-21 0:55 ` David Miller
2006-11-21 1:37 ` Andrew Morton
2006-11-21 1:40 ` David Miller
2006-11-21 1:39 ` David Miller
2006-11-17 17:02 ` [-mm patch] security/slim/slm_main.c: make 2 functions static Adrian Bunk
2006-11-17 23:58 ` [-mm patch] make sound/pci/hda/patch_sigmatel.c:stac92xx_dmic_labels[] static Adrian Bunk
2006-11-20 16:44 ` [Alsa-devel] " Takashi Iwai
2006-11-17 23:58 ` [-mm patch] make mm/thrash.c:global_faults static Adrian Bunk
2006-11-17 23:59 ` [RFC: -mm patch] remove kernel/timer.c:wall_jiffies Adrian Bunk
2006-11-18 7:00 ` Ingo Molnar
2006-11-17 23:59 ` [RFC: -mm patch] make kernel/timer.c:__next_timer_interrupt() static Adrian Bunk
2006-11-18 6:58 ` Ingo Molnar
2006-11-20 2:23 ` [-mm patch] drivers/scsi/scsi_scan.c: make 2 functions static Adrian Bunk
2006-11-20 2:34 ` Matthew Wilcox
2006-11-20 2:24 ` [-mm patch] fs/dlm/lowcomms-tcp.c: remove 2 functions Adrian Bunk
2006-11-20 2:24 ` [-mm patch] make ext2_get_blocks() static Adrian Bunk
2006-11-20 2:24 ` [-mm patch] fs/reiser4/: possible cleanups Adrian Bunk
2006-11-21 18:37 ` -mm: please drop reiser4-export-handle_ra_miss.patch Adrian Bunk
2006-11-21 19:42 ` [-mm patch] unexport {,__}remove_from_page_cache Adrian Bunk
2006-11-22 3:23 ` 2.6.19-rc5-mm2: suspend related BLOCK=n compile error Adrian Bunk
2006-11-22 3:34 ` Randy Dunlap
2006-11-22 11:20 ` Rafael J. Wysocki
2006-11-22 4:17 ` [-mm patch] CACHEFILES must depend on PROC_FS Adrian Bunk
2006-11-22 4:35 ` Randy Dunlap
2006-11-22 4:17 ` [-mm patch] fs/fscache/main.c: cleanups Adrian Bunk
2006-11-22 4:38 ` [-mm patch] drivers/mtd/nand/rtc_from4.c: use lib/bitrev.c Adrian Bunk
2006-11-28 22:19 ` David Woodhouse
2006-11-28 22:49 ` Andrew Morton
2006-11-28 22:52 ` David Woodhouse
2006-11-29 0:09 ` Andrew Morton
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=Pine.LNX.4.64.0611281940170.4516@blonde.wat.veritas.com \
--to=hugh@veritas.com \
--cc=akpm@osdl.org \
--cc=cmm@us.ibm.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbligh@mbligh.org \
--cc=mel@skynet.ie \
/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®