From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, Lukas Czerner <lczerner@redhat.com>,
"Theodore Tso" <tytso@mit.edu>
Subject: [ 151/153] ext4: rewrite punch hole to use ext4_ext_remove_space()
Date: Mon, 04 Mar 2013 03:39:38 +0000 [thread overview]
Message-ID: <20130304033722.408292426@decadent.org.uk> (raw)
In-Reply-To: <20130304033707.648729212@decadent.org.uk>
3.2-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Czerner <lczerner@redhat.com>
commit 5f95d21fb6f2aaa52830e5b7fb405f6c71d3ab85 upstream.
This commit rewrites ext4 punch hole implementation to use
ext4_ext_remove_space() instead of its home gown way of doing this via
ext4_ext_map_blocks(). There are several reasons for changing this.
Firstly it is quite non obvious that punching hole needs to
ext4_ext_map_blocks() to punch a hole, especially given that this
function should map blocks, not unmap it. It also required a lot of new
code in ext4_ext_map_blocks().
Secondly the design of it is not very effective. The reason is that we
are trying to punch out blocks in ext4_ext_punch_hole() in opposite
direction than in ext4_ext_rm_leaf() which causes the ext4_ext_rm_leaf()
to iterate through the whole tree from the end to the start to find the
requested extent for every extent we are going to punch out.
And finally the current implementation does not use the existing code,
but bring a lot of new code, which is IMO unnecessary since there
already is some infrastructure we can use. Specifically
ext4_ext_remove_space().
This commit changes ext4_ext_remove_space() to accept 'end' parameter so
we can not only truncate to the end of file, but also remove the space
in the middle of the file (punch a hole). Moreover, because the last
block to punch out, might be in the middle of the extent, we have to
split the extent at 'end + 1' so ext4_ext_rm_leaf() can easily either
remove the whole fist part of split extent, or change its size.
ext4_ext_remove_space() is then used to actually remove the space
(extents) from within the hole, instead of ext4_ext_map_blocks().
Note that this also fix the issue with punch hole, where we would forget
to remove empty index blocks from the extent tree, resulting in double
free block error and file system corruption. This is simply because we
now use different code path, where this problem does not exist.
This has been tested with fsx running for several days and xfstests,
plus xfstest #251 with '-o discard' run on the loop image (which
converts discard requestes into punch hole to the backing file). All of
it on 1K and 4K file system block size.
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
[bwh: Backported to 3.2.y: move EXT4_EXT_DATA_VALID{1,2} along with the
other extent splitting flags]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
fs/ext4/extents.c | 170 ++++++++++++++++++++++++++++--------------------------
1 file changed, 88 insertions(+), 82 deletions(-)
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -45,6 +45,17 @@
#include <trace/events/ext4.h>
+/*
+ * used by extent splitting.
+ */
+#define EXT4_EXT_MAY_ZEROOUT 0x1 /* safe to zeroout if split fails \
+ due to ENOSPC */
+#define EXT4_EXT_MARK_UNINIT1 0x2 /* mark first half uninitialized */
+#define EXT4_EXT_MARK_UNINIT2 0x4 /* mark second half uninitialized */
+
+#define EXT4_EXT_DATA_VALID1 0x8 /* first half contains valid data */
+#define EXT4_EXT_DATA_VALID2 0x10 /* second half contains valid data */
+
static int ext4_split_extent(handle_t *handle,
struct inode *inode,
struct ext4_ext_path *path,
@@ -52,6 +63,13 @@ static int ext4_split_extent(handle_t *h
int split_flag,
int flags);
+static int ext4_split_extent_at(handle_t *handle,
+ struct inode *inode,
+ struct ext4_ext_path *path,
+ ext4_lblk_t split,
+ int split_flag,
+ int flags);
+
static int ext4_ext_truncate_extend_restart(handle_t *handle,
struct inode *inode,
int needed)
@@ -2324,7 +2342,7 @@ ext4_ext_rm_leaf(handle_t *handle, struc
struct ext4_extent *ex;
/* the header must be checked already in ext4_ext_remove_space() */
- ext_debug("truncate since %u in leaf\n", start);
+ ext_debug("truncate since %u in leaf to %u\n", start, end);
if (!path[depth].p_hdr)
path[depth].p_hdr = ext_block_hdr(path[depth].p_bh);
eh = path[depth].p_hdr;
@@ -2359,7 +2377,7 @@ ext4_ext_rm_leaf(handle_t *handle, struc
ext_debug(" border %u:%u\n", a, b);
/* If this extent is beyond the end of the hole, skip it */
- if (end <= ex_ee_block) {
+ if (end < ex_ee_block) {
ex--;
ex_ee_block = le32_to_cpu(ex->ee_block);
ex_ee_len = ext4_ext_get_actual_len(ex);
@@ -2498,7 +2516,8 @@ ext4_ext_more_to_rm(struct ext4_ext_path
return 1;
}
-static int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start)
+static int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
+ ext4_lblk_t end)
{
struct super_block *sb = inode->i_sb;
int depth = ext_depth(inode);
@@ -2507,7 +2526,7 @@ static int ext4_ext_remove_space(struct
handle_t *handle;
int i, err;
- ext_debug("truncate since %u\n", start);
+ ext_debug("truncate since %u to %u\n", start, end);
/* probably first extent we're gonna free will be last in block */
handle = ext4_journal_start(inode, depth + 1);
@@ -2520,6 +2539,61 @@ again:
trace_ext4_ext_remove_space(inode, start, depth);
/*
+ * Check if we are removing extents inside the extent tree. If that
+ * is the case, we are going to punch a hole inside the extent tree
+ * so we have to check whether we need to split the extent covering
+ * the last block to remove so we can easily remove the part of it
+ * in ext4_ext_rm_leaf().
+ */
+ if (end < EXT_MAX_BLOCKS - 1) {
+ struct ext4_extent *ex;
+ ext4_lblk_t ee_block;
+
+ /* find extent for this block */
+ path = ext4_ext_find_extent(inode, end, NULL);
+ if (IS_ERR(path)) {
+ ext4_journal_stop(handle);
+ return PTR_ERR(path);
+ }
+ depth = ext_depth(inode);
+ ex = path[depth].p_ext;
+ if (!ex)
+ goto cont;
+
+ ee_block = le32_to_cpu(ex->ee_block);
+
+ /*
+ * See if the last block is inside the extent, if so split
+ * the extent at 'end' block so we can easily remove the
+ * tail of the first part of the split extent in
+ * ext4_ext_rm_leaf().
+ */
+ if (end >= ee_block &&
+ end < ee_block + ext4_ext_get_actual_len(ex) - 1) {
+ int split_flag = 0;
+
+ if (ext4_ext_is_uninitialized(ex))
+ split_flag = EXT4_EXT_MARK_UNINIT1 |
+ EXT4_EXT_MARK_UNINIT2;
+
+ /*
+ * Split the extent in two so that 'end' is the last
+ * block in the first new extent
+ */
+ err = ext4_split_extent_at(handle, inode, path,
+ end + 1, split_flag,
+ EXT4_GET_BLOCKS_PRE_IO |
+ EXT4_GET_BLOCKS_PUNCH_OUT_EXT);
+
+ if (err < 0)
+ goto out;
+ }
+ ext4_ext_drop_refs(path);
+ kfree(path);
+ }
+cont:
+
+ /*
* We start scanning from right side, freeing all the blocks
* after i_size and walking into the tree depth-wise.
*/
@@ -2531,6 +2605,7 @@ again:
}
path[0].p_depth = depth;
path[0].p_hdr = ext_inode_hdr(inode);
+
if (ext4_ext_check(inode, path[0].p_hdr, depth)) {
err = -EIO;
goto out;
@@ -2542,7 +2617,7 @@ again:
/* this is leaf block */
err = ext4_ext_rm_leaf(handle, inode, path,
&partial_cluster, start,
- EXT_MAX_BLOCKS - 1);
+ end);
/* root level has p_bh == NULL, brelse() eats this */
brelse(path[i].p_bh);
path[i].p_bh = NULL;
@@ -2725,17 +2800,6 @@ static int ext4_ext_zeroout(struct inode
}
/*
- * used by extent splitting.
- */
-#define EXT4_EXT_MAY_ZEROOUT 0x1 /* safe to zeroout if split fails \
- due to ENOSPC */
-#define EXT4_EXT_MARK_UNINIT1 0x2 /* mark first half uninitialized */
-#define EXT4_EXT_MARK_UNINIT2 0x4 /* mark second half uninitialized */
-
-#define EXT4_EXT_DATA_VALID1 0x8 /* first half contains valid data */
-#define EXT4_EXT_DATA_VALID2 0x10 /* second half contains valid data */
-
-/*
* ext4_split_extent_at() splits an extent at given block.
*
* @handle: the journal handle
@@ -4277,7 +4341,7 @@ void ext4_ext_truncate(struct inode *ino
last_block = (inode->i_size + sb->s_blocksize - 1)
>> EXT4_BLOCK_SIZE_BITS(sb);
- err = ext4_ext_remove_space(inode, last_block);
+ err = ext4_ext_remove_space(inode, last_block, EXT_MAX_BLOCKS - 1);
/* In a multi-transaction truncate, we only make the final
* transaction synchronous.
@@ -4754,14 +4818,12 @@ int ext4_ext_punch_hole(struct file *fil
{
struct inode *inode = file->f_path.dentry->d_inode;
struct super_block *sb = inode->i_sb;
- struct ext4_ext_cache cache_ex;
- ext4_lblk_t first_block, last_block, num_blocks, iblock, max_blocks;
+ ext4_lblk_t first_block, stop_block;
struct address_space *mapping = inode->i_mapping;
- struct ext4_map_blocks map;
handle_t *handle;
loff_t first_page, last_page, page_len;
loff_t first_page_offset, last_page_offset;
- int ret, credits, blocks_released, err = 0;
+ int credits, err = 0;
/* No need to punch hole beyond i_size */
if (offset >= inode->i_size)
@@ -4777,10 +4839,6 @@ int ext4_ext_punch_hole(struct file *fil
offset;
}
- first_block = (offset + sb->s_blocksize - 1) >>
- EXT4_BLOCK_SIZE_BITS(sb);
- last_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
-
first_page = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
last_page = (offset + length) >> PAGE_CACHE_SHIFT;
@@ -4859,7 +4917,6 @@ int ext4_ext_punch_hole(struct file *fil
}
}
-
/*
* If i_size is contained in the last page, we need to
* unmap and zero the partial page after i_size
@@ -4879,73 +4936,22 @@ int ext4_ext_punch_hole(struct file *fil
}
}
+ first_block = (offset + sb->s_blocksize - 1) >>
+ EXT4_BLOCK_SIZE_BITS(sb);
+ stop_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
+
/* If there are no blocks to remove, return now */
- if (first_block >= last_block)
+ if (first_block >= stop_block)
goto out;
down_write(&EXT4_I(inode)->i_data_sem);
ext4_ext_invalidate_cache(inode);
ext4_discard_preallocations(inode);
- /*
- * Loop over all the blocks and identify blocks
- * that need to be punched out
- */
- iblock = first_block;
- blocks_released = 0;
- while (iblock < last_block) {
- max_blocks = last_block - iblock;
- num_blocks = 1;
- memset(&map, 0, sizeof(map));
- map.m_lblk = iblock;
- map.m_len = max_blocks;
- ret = ext4_ext_map_blocks(handle, inode, &map,
- EXT4_GET_BLOCKS_PUNCH_OUT_EXT);
-
- if (ret > 0) {
- blocks_released += ret;
- num_blocks = ret;
- } else if (ret == 0) {
- /*
- * If map blocks could not find the block,
- * then it is in a hole. If the hole was
- * not already cached, then map blocks should
- * put it in the cache. So we can get the hole
- * out of the cache
- */
- memset(&cache_ex, 0, sizeof(cache_ex));
- if ((ext4_ext_check_cache(inode, iblock, &cache_ex)) &&
- !cache_ex.ec_start) {
-
- /* The hole is cached */
- num_blocks = cache_ex.ec_block +
- cache_ex.ec_len - iblock;
-
- } else {
- /* The block could not be identified */
- err = -EIO;
- break;
- }
- } else {
- /* Map blocks error */
- err = ret;
- break;
- }
+ err = ext4_ext_remove_space(inode, first_block, stop_block - 1);
- if (num_blocks == 0) {
- /* This condition should never happen */
- ext_debug("Block lookup failed");
- err = -EIO;
- break;
- }
-
- iblock += num_blocks;
- }
-
- if (blocks_released > 0) {
- ext4_ext_invalidate_cache(inode);
- ext4_discard_preallocations(inode);
- }
+ ext4_ext_invalidate_cache(inode);
+ ext4_discard_preallocations(inode);
if (IS_SYNC(inode))
ext4_handle_sync(handle);
next prev parent reply other threads:[~2013-03-04 4:17 UTC|newest]
Thread overview: 172+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-04 3:37 [ 000/153] 3.2.40-stable review Ben Hutchings
2013-03-04 3:37 ` [ 001/153] sunvdc: Fix off-by-one in generic_request() Ben Hutchings
2013-03-04 3:37 ` [ 002/153] genirq: Avoid deadlock in spurious handling Ben Hutchings
2013-03-04 3:37 ` [ 003/153] KVM: s390: Handle hosts not supporting s390-virtio Ben Hutchings
2013-03-04 3:37 ` [ 004/153] workqueue: consider work function when searching for busy work items Ben Hutchings
2013-03-04 3:37 ` [ 005/153] [media] v4l: Reset subdev v4l2_dev field to NULL if registration fails Ben Hutchings
2013-03-04 3:37 ` [ 006/153] [media] omap_vout: find_vma() needs ->mmap_sem held Ben Hutchings
2013-03-04 3:37 ` [ 007/153] dca: check against empty dca_domains list before unregister provider Ben Hutchings
2013-03-04 3:37 ` [ 008/153] powerpc/eeh: Fix crash when adding a device in a slot with DDW Ben Hutchings
2013-03-08 2:51 ` Michael Neuling
2013-03-08 3:29 ` Ben Hutchings
2013-03-12 5:31 ` powerpc/eeh: Fix compile error due to missing include file Michael Neuling
2013-03-12 18:14 ` [ 008/153] powerpc/eeh: Fix crash when adding a device in a slot with DDW Thadeu Lima de Souza Cascardo
2013-03-12 23:17 ` Michael Neuling
2013-03-14 0:21 ` Ben Hutchings
2013-03-04 3:37 ` [ 009/153] ext4: return ENOMEM if sb_getblk() fails Ben Hutchings
2013-03-04 3:37 ` [ 010/153] pcmcia/vrc4171: Add missing spinlock init Ben Hutchings
2013-03-04 3:37 ` [ 011/153] [PARISC] Purge existing TLB entries in set_pte_at and ptep_set_wrprotect Ben Hutchings
2013-03-04 3:37 ` [ 012/153] ARM: PXA3xx: program the CSMSADRCFG register Ben Hutchings
2013-03-04 3:37 ` [ 013/153] USB: option: add and update Alcatel modems Ben Hutchings
2013-03-04 3:37 ` [ 014/153] quota: autoload the quota_v2 module for QFMT_VFS_V1 quota format Ben Hutchings
2013-03-04 3:37 ` [ 015/153] ext4: fix possible use-after-free with AIO Ben Hutchings
2013-03-04 3:37 ` [ 016/153] s390/kvm: Fix store status for ACRS/FPRS Ben Hutchings
2013-03-04 3:37 ` [ 017/153] staging: comedi: disallow COMEDI_DEVCONFIG on non-board minors Ben Hutchings
2013-03-04 3:37 ` [ 018/153] ALSA: usb-audio: fix Roland A-PRO support Ben Hutchings
2013-03-04 3:37 ` [ 019/153] x86-32, mm: Rip out x86_32 NUMA remapping code Ben Hutchings
2013-03-04 3:37 ` [ 020/153] ALSA: hda - Release assigned pin/cvt at error path of hdmi_pcm_open() Ben Hutchings
2013-03-04 3:37 ` [ 021/153] ext4: fix race in ext4_mb_add_n_trim() Ben Hutchings
2013-03-04 3:37 ` [ 022/153] zram: Fix deadlock bug in partial read/write Ben Hutchings
2013-03-04 3:37 ` [ 023/153] Driver core: treat unregistered bus_types as having no devices Ben Hutchings
2013-03-04 3:37 ` [ 024/153] ALSA: aloop: Fix Oops while PM resume Ben Hutchings
2013-03-04 3:37 ` [ 025/153] UBIFS: fix double free of ubifs_orphan objects Ben Hutchings
2013-03-04 3:37 ` [ 026/153] tty: set_termios/set_termiox should not return -EINTR Ben Hutchings
2013-03-04 3:37 ` [ 027/153] hrtimer: Prevent hrtimer_enqueue_reprogram race Ben Hutchings
2013-03-04 3:37 ` [ 028/153] nfsd: Fix memleak Ben Hutchings
2013-03-04 3:37 ` [ 029/153] staging: comedi: check s->async for poll(), read() and write() Ben Hutchings
2013-03-04 3:37 ` [ 030/153] ACPI: Add DMI entry for Sony VGN-FW41E_H Ben Hutchings
2013-03-04 3:37 ` [ 031/153] vgacon/vt: clear buffer attributes when we load a 512 character font (v2) Ben Hutchings
2013-03-04 3:37 ` [ 032/153] fbcon: dont lose the console font across generic->chip driver switch Ben Hutchings
2013-03-04 3:37 ` [ 033/153] drm/usb: bind driver to correct device Ben Hutchings
2013-03-04 3:37 ` [ 034/153] x86: Do not leak kernel page mapping locations Ben Hutchings
2013-03-04 3:37 ` [ 035/153] timeconst.pl: Eliminate Perl warning Ben Hutchings
2013-03-04 3:37 ` [ 036/153] fb: rework locking to fix lock ordering on takeover Ben Hutchings
2013-03-04 3:37 ` [ 037/153] fb: Yet another band-aid for fixing lockdep mess Ben Hutchings
2013-03-04 3:37 ` [ 038/153] p54usb: corrected USB ID for T-Com Sinus 154 data II Ben Hutchings
2013-03-04 3:37 ` [ 039/153] rtlwifi: rtl8192cu: Fix NULL dereference BUG when using new_id Ben Hutchings
2013-03-04 3:37 ` [ 040/153] rtlwifi: rtl8192cu: Add new USB ID Ben Hutchings
2013-03-04 3:37 ` [ 041/153] USB: storage: properly handle the endian issues of idProduct Ben Hutchings
2013-03-04 3:37 ` [ 042/153] x86/apic: Use x2apic physical mode based on FADT setting Ben Hutchings
2013-03-04 3:37 ` [ 043/153] x86/apic: Work around boot failure on HP ProLiant DL980 G7 Server systems Ben Hutchings
2013-03-04 3:37 ` [ 044/153] ALSA: rme32.c irq enabling after spin_lock_irq Ben Hutchings
2013-03-04 3:37 ` [ 045/153] ALSA: ali5451: remove irq enabling in pointer callback Ben Hutchings
2013-03-04 3:37 ` [ 046/153] drivers/rtc/rtc-pl031.c: restore ST variant functionality Ben Hutchings
2013-03-04 3:37 ` [ 047/153] x86: Hyper-V: register clocksource only if its advertised Ben Hutchings
2013-03-04 3:37 ` [ 048/153] x86/mm: Check if PUD is large when validating a kernel address Ben Hutchings
2013-03-04 3:37 ` [ 049/153] Revert "drm: Add EDID_QUIRK_FORCE_REDUCED_BLANKING for ASUS VW222S" Ben Hutchings
2013-03-04 3:37 ` [ 050/153] USB: option: add Yota / Megafon M100-1 4g modem Ben Hutchings
2013-03-04 3:37 ` [ 051/153] USB: serial: fix null-pointer dereferences on disconnect Ben Hutchings
2013-03-04 3:37 ` [ 052/153] idr: idr_for_each_entry() macro Ben Hutchings
2013-03-04 4:56 ` Ben Hutchings
2013-03-04 21:05 ` Philipp Reisner
2013-03-05 5:24 ` Ben Hutchings
2013-03-04 3:38 ` [ 053/153] pps: Add pps_lookup_dev() function Ben Hutchings
2013-03-04 3:38 ` [ 054/153] pps: Use pps_lookup_dev to reduce ldisc coupling Ben Hutchings
2013-03-04 3:38 ` [ 055/153] pps: Fix a use-after free bug when unregistering a source Ben Hutchings
2013-03-04 3:38 ` [ 056/153] PCI/PM: Clean up PME state when removing a device Ben Hutchings
2013-03-04 3:38 ` [ 057/153] USB: option: add Huawei "ACM" devices using protocol = vendor Ben Hutchings
2013-03-04 3:38 ` [ 058/153] efi: Clear EFI_RUNTIME_SERVICES rather than EFI_BOOT by "noefi" boot parameter Ben Hutchings
2013-03-04 3:38 ` [ 059/153] ARM: samsung: fix assembly syntax for new gas Ben Hutchings
2013-03-04 3:38 ` [ 060/153] ARM: w90x900: fix legacy assembly syntax Ben Hutchings
2013-03-04 3:38 ` [ 061/153] USB: ehci-omap: Fix autoloading of module Ben Hutchings
2013-03-04 3:38 ` [ 062/153] USB: usb-storage: unusual_devs update for Super TOP SATA bridge Ben Hutchings
2013-03-04 3:38 ` [ 063/153] posix-cpu-timers: Fix nanosleep task_struct leak Ben Hutchings
2013-03-04 3:38 ` [ 064/153] svcrpc: make svc_age_temp_xprts enqueue under sv_lock Ben Hutchings
2013-03-04 3:38 ` [ 065/153] NFSv4.1: Dont decode skipped layoutgets Ben Hutchings
2013-03-04 3:38 ` [ 066/153] umount oops when remove blocklayoutdriver first Ben Hutchings
2013-03-04 3:38 ` [ 067/153] cgroup: fix exit() vs rmdir() race Ben Hutchings
2013-03-04 3:38 ` [ 068/153] cpuset: fix cpuset_print_task_mems_allowed() vs rename() race Ben Hutchings
2013-03-04 3:38 ` [ 069/153] ext4: fix xattr block allocation/release with bigalloc Ben Hutchings
2013-03-04 3:38 ` [ 070/153] mm: fix pageblock bitmap allocation Ben Hutchings
2013-03-04 3:38 ` [ 071/153] rtlwifi: usb: allocate URB control message setup_packet and data buffer separately Ben Hutchings
2013-03-04 3:38 ` [ 072/153] target: Fix lookup of dynamic NodeACLs during cached demo-mode operation Ben Hutchings
2013-03-04 3:38 ` [ 073/153] target: Add missing mapped_lun bounds checking during make_mappedlun setup Ben Hutchings
2013-03-04 3:38 ` [ 074/153] ftrace: Call ftrace cleanup module notifier after all other notifiers Ben Hutchings
2013-03-04 3:38 ` [ 075/153] b43: Increase number of RX DMA slots Ben Hutchings
2013-03-04 3:38 ` [ 076/153] NLM: Ensure that we resend all pending blocking locks after a reclaim Ben Hutchings
2013-03-04 3:38 ` [ 077/153] ALSA: hda - hdmi: ELD shouldnt be valid after unplug Ben Hutchings
2013-03-04 3:38 ` [ 078/153] xen-blkback: do not leak mode property Ben Hutchings
2013-03-04 3:38 ` [ 079/153] drm: dont add inferred modes for monitors that dont support them Ben Hutchings
2013-03-04 3:38 ` [ 080/153] drm/i915: disable shared panel fitter for pipe Ben Hutchings
2013-03-04 3:38 ` [ 081/153] drm/i915: add missing \n to UTS_RELEASE in the error_state Ben Hutchings
2013-03-04 3:38 ` [ 082/153] drm/i915: Set i9xx sdvo clock limits according to specifications Ben Hutchings
2013-03-04 3:38 ` [ 083/153] intel/iommu: force writebuffer-flush quirk on Gen 4 Chipsets Ben Hutchings
2013-03-04 3:38 ` [ 084/153] xen: close evtchn port if binding to irq fails Ben Hutchings
2013-03-04 3:38 ` [ 085/153] xen: Send spinlock IPI to all waiters Ben Hutchings
2013-03-04 3:38 ` [ 086/153] x86, efi: Make "noefi" really disable EFI runtime serivces Ben Hutchings
2013-03-04 3:38 ` [ 087/153] ALSA: usb: Fix Processing Unit Descriptor parsers Ben Hutchings
2013-03-04 3:38 ` [ 088/153] posix-timer: Dont call idr_find() with out-of-range ID Ben Hutchings
2013-03-04 3:38 ` [ 089/153] inotify: remove broken mask checks causing unmount to be EINVAL Ben Hutchings
2013-03-04 3:38 ` [ 090/153] fs/block_dev.c: page cache wrongly left invalidated after revalidate_disk() Ben Hutchings
2013-03-04 3:38 ` [ 091/153] ocfs2: unlock super lock if lockres refresh failed Ben Hutchings
2013-03-04 3:38 ` [ 092/153] drivers/video/backlight/adp88?0_bl.c: fix resume Ben Hutchings
2013-03-04 3:38 ` [ 093/153] ALSA: hda - hdmi: Make jacks phantom, if theyre not detectable Ben Hutchings
2013-03-04 5:13 ` Ben Hutchings
2013-03-04 7:46 ` David Henningsson
2013-03-04 7:48 ` Greg Kroah-Hartman
2013-03-04 7:55 ` David Henningsson
2013-03-04 13:57 ` Ben Hutchings
2013-03-04 3:38 ` [ 094/153] ext4: fix free clusters calculation in bigalloc filesystem Ben Hutchings
2013-03-04 3:38 ` [ 095/153] fs: Fix possible use-after-free with AIO Ben Hutchings
2013-03-04 3:38 ` [ 096/153] powerpc/kexec: Disable hard IRQ before kexec Ben Hutchings
2013-03-04 3:38 ` [ 097/153] mm: mmu_notifier: have mmu_notifiers use a global SRCU so they may safely schedule Ben Hutchings
2013-03-04 3:38 ` [ 098/153] mm: mmu_notifier: make the mmu_notifier srcu static Ben Hutchings
2013-03-04 3:38 ` [ 099/153] mmu_notifier_unregister NULL Pointer deref and multiple ->release() callouts Ben Hutchings
2013-03-04 3:38 ` [ 100/153] mm/fadvise.c: drain all pagevecs if POSIX_FADV_DONTNEED fails to discard all pages Ben Hutchings
2013-03-04 3:38 ` [ 101/153] tmpfs: fix use-after-free of mempolicy object Ben Hutchings
2013-03-04 3:38 ` [ 102/153] mmc: sdhci-esdhc-imx: fix host version read Ben Hutchings
2013-03-04 3:38 ` [ 103/153] doc, xen: Mention earlyprintk=xen in the documentation Ben Hutchings
2013-03-04 3:38 ` [ 104/153] doc, kernel-parameters: Document console=hvc<n> Ben Hutchings
2013-03-04 3:38 ` [ 105/153] ocfs2: fix possible use-after-free with AIO Ben Hutchings
2013-03-04 3:38 ` [ 106/153] x86: Make sure we can boot in the case the BDA contains pure garbage Ben Hutchings
2013-03-04 3:38 ` [ 107/153] ocfs2: fix ocfs2_init_security_and_acl() to initialize acl correctly Ben Hutchings
2013-03-04 3:38 ` [ 108/153] ocfs2: ac->ac_allow_chain_relink=0 wont disable group relink Ben Hutchings
2013-03-04 3:38 ` [ 109/153] block: fix ext_devt_idr handling Ben Hutchings
2013-03-04 3:38 ` [ 110/153] idr: fix a subtle bug in idr_get_next() Ben Hutchings
2013-03-04 3:38 ` [ 111/153] block: fix synchronization and limit check in blk_alloc_devt() Ben Hutchings
2013-03-04 3:38 ` [ 112/153] firewire: add minor number range check to fw_device_init() Ben Hutchings
2013-03-04 3:39 ` [ 113/153] idr: make idr_get_next() good for rcu_read_lock() Ben Hutchings
2013-03-04 3:39 ` [ 114/153] idr: fix top layer handling Ben Hutchings
2013-03-04 17:37 ` Luis Henriques
2013-03-04 3:39 ` [ 115/153] sysctl: fix null checking in bin_dn_node_address() Ben Hutchings
2013-03-04 3:39 ` [ 116/153] nbd: fsync and kill block device on shutdown Ben Hutchings
2013-03-04 3:39 ` [ 117/153] igb: Remove artificial restriction on RQDPC stat reading Ben Hutchings
2013-03-04 3:39 ` [ 118/153] drm/radeon/evergreen+: wait for the MC to settle after MC blackout Ben Hutchings
2013-03-04 3:39 ` [ 119/153] s390/timer: avoid overflow when programming clock comparator Ben Hutchings
2013-03-04 3:39 ` [ 120/153] unbreak automounter support on 64-bit kernel with 32-bit userspace (v2) Ben Hutchings
2013-03-04 3:39 ` [ 121/153] xen-pciback: rate limit error messages from xen_pcibk_enable_msi{,x}() Ben Hutchings
2013-03-04 3:39 ` [ 122/153] bridge: set priority of STP packets Ben Hutchings
2013-03-04 3:39 ` [ 123/153] xen-netback: correctly return errors from netbk_count_requests() Ben Hutchings
2013-03-04 3:39 ` [ 124/153] xen-netback: cancel the credit timer when taking the vif down Ben Hutchings
2013-03-04 3:39 ` [ 125/153] ipv4: fix a bug in ping_err() Ben Hutchings
2013-03-04 3:39 ` [ 126/153] ipv6: use a stronger hash for tcp Ben Hutchings
2013-03-04 3:39 ` [ 127/153] staging: comedi: ni_labpc: correct differential channel sequence for AI commands Ben Hutchings
2013-03-04 3:39 ` [ 128/153] staging: comedi: ni_labpc: set up command4 register *after* command3 Ben Hutchings
2013-03-04 3:39 ` [ 129/153] pstore: Avoid deadlock in panic and emergency-restart path Ben Hutchings
2013-03-04 3:39 ` [ 130/153] ata_piix: IDE-mode SATA patch for Intel Lynx Point DeviceIDs Ben Hutchings
2013-03-04 3:39 ` [ 131/153] ata_piix: IDE-mode SATA patch for Intel DH89xxCC DeviceIDs Ben Hutchings
2013-03-04 3:39 ` [ 132/153] ata_piix: Add Device IDs for Intel Lynx Point-LP PCH Ben Hutchings
2013-03-04 3:39 ` [ 133/153] ata_piix: IDE-mode SATA patch for Intel Avoton DeviceIDs Ben Hutchings
2013-03-04 3:39 ` [ 134/153] ata_piix: Add Device IDs for Intel Wellsburg PCH Ben Hutchings
2013-03-04 3:39 ` [ 135/153] [hid] usb hid quirks for Masterkit MA901 usb radio Ben Hutchings
2013-03-04 3:39 ` [ 136/153] [media] Avoid sysfs oops when an rc_devs raw device is absent Ben Hutchings
2013-03-04 3:39 ` [ 137/153] [media] rc: unlock on error in show_protocols() Ben Hutchings
2013-03-04 3:39 ` [ 138/153] vhost: fix length for cross region descriptor Ben Hutchings
2013-03-04 3:39 ` [ 139/153] 8250: use correct value for PORT_BRCM_TRUMANAGE Ben Hutchings
2013-03-04 3:39 ` [ 140/153] usb: Add quirk detection based on interface information Ben Hutchings
2013-03-04 3:39 ` [ 141/153] usb: Add USB_QUIRK_RESET_RESUME for all Logitech UVC webcams Ben Hutchings
2013-03-04 3:39 ` [ 142/153] speakup: lower default software speech rate Ben Hutchings
2013-03-04 3:39 ` [ 143/153] asus-laptop: Do not call HWRS on init Ben Hutchings
2013-03-04 3:39 ` [ 144/153] usermodehelper: introduce umh_complete(sub_info) Ben Hutchings
2013-03-04 3:39 ` [ 145/153] usermodehelper: implement UMH_KILLABLE Ben Hutchings
2013-03-04 3:39 ` [ 146/153] usermodehelper: ____call_usermodehelper() doesnt need do_exit() Ben Hutchings
2013-03-04 3:39 ` [ 147/153] kmod: introduce call_modprobe() helper Ben Hutchings
2013-03-04 3:39 ` [ 148/153] kmod: make __request_module() killable Ben Hutchings
2013-03-04 3:39 ` [ 149/153] exec: use -ELOOP for max recursion depth Ben Hutchings
2013-03-04 3:39 ` [ 150/153] fs: cachefiles: add support for large files in filesystem caching Ben Hutchings
2013-03-04 3:39 ` Ben Hutchings [this message]
2013-03-04 3:39 ` [ 152/153] ext4: fix hole punch failure when depth is greater than 0 Ben Hutchings
2013-03-04 3:39 ` [ 153/153] ext4: fix kernel BUG on large-scale rm -rf commands Ben Hutchings
2013-03-04 4:29 ` [ 000/153] 3.2.40-stable review Ben Hutchings
2013-03-05 14:07 ` Satoru Takeuchi
2013-03-05 14:31 ` Ben Hutchings
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=20130304033722.408292426@decadent.org.uk \
--to=ben@decadent.org.uk \
--cc=akpm@linux-foundation.org \
--cc=lczerner@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tytso@mit.edu \
/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