From: Ben Hutchings <ben@decadent.org.uk>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: akpm@linux-foundation.org, "Jan Kara" <jack@suse.cz>,
"Theodore Ts'o" <tytso@mit.edu>
Subject: [PATCH 3.2 032/110] jbd2: issue cache flush after checkpointing even with internal journal
Date: Mon, 10 Aug 2015 12:12:31 +0200 [thread overview]
Message-ID: <lsq.1439201551.592198876@decadent.org.uk> (raw)
In-Reply-To: <lsq.1439201550.905387334@decadent.org.uk>
3.2.71-rc1 review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <jack@suse.cz>
commit 79feb521a44705262d15cc819a4117a447b11ea7 upstream.
When we reach jbd2_cleanup_journal_tail(), there is no guarantee that
checkpointed buffers are on a stable storage - especially if buffers were
written out by jbd2_log_do_checkpoint(), they are likely to be only in disk's
caches. Thus when we update journal superblock effectively removing old
transaction from journal, this write of superblock can get to stable storage
before those checkpointed buffers which can result in filesystem corruption
after a crash. Thus we must unconditionally issue a cache flush before we
update journal superblock in these cases.
A similar problem can also occur if journal superblock is written only in
disk's caches, other transaction starts reusing space of the transaction
cleaned from the log and power failure happens. Subsequent journal replay would
still try to replay the old transaction but some of it's blocks may be already
overwritten by the new transaction. For this reason we must use WRITE_FUA when
updating log tail and we must first write new log tail to disk and update
in-memory information only after that.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
[bwh: Prerequisite for "jbd2: fix ocfs2 corrupt when updating journal
superblock fails".
Backported to 3.2:
- Adjust context
- Drop changes to jbd2_journal_update_sb_log_tail trace event]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/fs/jbd2/checkpoint.c
+++ b/fs/jbd2/checkpoint.c
@@ -478,79 +478,28 @@ out:
int jbd2_cleanup_journal_tail(journal_t *journal)
{
- transaction_t * transaction;
tid_t first_tid;
- unsigned long blocknr, freed;
+ unsigned long blocknr;
if (is_journal_aborted(journal))
return 1;
- /* OK, work out the oldest transaction remaining in the log, and
- * the log block it starts at.
- *
- * If the log is now empty, we need to work out which is the
- * next transaction ID we will write, and where it will
- * start. */
-
- write_lock(&journal->j_state_lock);
- spin_lock(&journal->j_list_lock);
- transaction = journal->j_checkpoint_transactions;
- if (transaction) {
- first_tid = transaction->t_tid;
- blocknr = transaction->t_log_start;
- } else if ((transaction = journal->j_committing_transaction) != NULL) {
- first_tid = transaction->t_tid;
- blocknr = transaction->t_log_start;
- } else if ((transaction = journal->j_running_transaction) != NULL) {
- first_tid = transaction->t_tid;
- blocknr = journal->j_head;
- } else {
- first_tid = journal->j_transaction_sequence;
- blocknr = journal->j_head;
- }
- spin_unlock(&journal->j_list_lock);
- J_ASSERT(blocknr != 0);
-
- /* If the oldest pinned transaction is at the tail of the log
- already then there's not much we can do right now. */
- if (journal->j_tail_sequence == first_tid) {
- write_unlock(&journal->j_state_lock);
+ if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr))
return 1;
- }
-
- /* OK, update the superblock to recover the freed space.
- * Physical blocks come first: have we wrapped beyond the end of
- * the log? */
- freed = blocknr - journal->j_tail;
- if (blocknr < journal->j_tail)
- freed = freed + journal->j_last - journal->j_first;
-
- trace_jbd2_cleanup_journal_tail(journal, first_tid, blocknr, freed);
- jbd_debug(1,
- "Cleaning journal tail from %d to %d (offset %lu), "
- "freeing %lu\n",
- journal->j_tail_sequence, first_tid, blocknr, freed);
-
- journal->j_free += freed;
- journal->j_tail_sequence = first_tid;
- journal->j_tail = blocknr;
- write_unlock(&journal->j_state_lock);
+ J_ASSERT(blocknr != 0);
/*
- * If there is an external journal, we need to make sure that
- * any data blocks that were recently written out --- perhaps
- * by jbd2_log_do_checkpoint() --- are flushed out before we
- * drop the transactions from the external journal. It's
- * unlikely this will be necessary, especially with a
- * appropriately sized journal, but we need this to guarantee
- * correctness. Fortunately jbd2_cleanup_journal_tail()
- * doesn't get called all that often.
+ * We need to make sure that any blocks that were recently written out
+ * --- perhaps by jbd2_log_do_checkpoint() --- are flushed out before
+ * we drop the transactions from the journal. It's unlikely this will
+ * be necessary, especially with an appropriately sized journal, but we
+ * need this to guarantee correctness. Fortunately
+ * jbd2_cleanup_journal_tail() doesn't get called all that often.
*/
- if ((journal->j_fs_dev != journal->j_dev) &&
- (journal->j_flags & JBD2_BARRIER))
+ if (journal->j_flags & JBD2_BARRIER)
blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
- if (!(journal->j_flags & JBD2_ABORT))
- jbd2_journal_update_sb_log_tail(journal);
+
+ __jbd2_update_log_tail(journal, first_tid, blocknr);
return 0;
}
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -340,7 +340,16 @@ void jbd2_journal_commit_transaction(jou
/* Do we need to erase the effects of a prior jbd2_journal_flush? */
if (journal->j_flags & JBD2_FLUSHED) {
jbd_debug(3, "super block updated\n");
- jbd2_journal_update_sb_log_tail(journal);
+ /*
+ * We hold j_checkpoint_mutex so tail cannot change under us.
+ * We don't need any special data guarantees for writing sb
+ * since journal is empty and it is ok for write to be
+ * flushed only with transaction commit.
+ */
+ jbd2_journal_update_sb_log_tail(journal,
+ journal->j_tail_sequence,
+ journal->j_tail,
+ WRITE_SYNC);
} else {
jbd_debug(3, "superblock not updated\n");
}
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -775,6 +775,85 @@ struct journal_head *jbd2_journal_get_de
return jbd2_journal_add_journal_head(bh);
}
+/*
+ * Return tid of the oldest transaction in the journal and block in the journal
+ * where the transaction starts.
+ *
+ * If the journal is now empty, return which will be the next transaction ID
+ * we will write and where will that transaction start.
+ *
+ * The return value is 0 if journal tail cannot be pushed any further, 1 if
+ * it can.
+ */
+int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
+ unsigned long *block)
+{
+ transaction_t *transaction;
+ int ret;
+
+ read_lock(&journal->j_state_lock);
+ spin_lock(&journal->j_list_lock);
+ transaction = journal->j_checkpoint_transactions;
+ if (transaction) {
+ *tid = transaction->t_tid;
+ *block = transaction->t_log_start;
+ } else if ((transaction = journal->j_committing_transaction) != NULL) {
+ *tid = transaction->t_tid;
+ *block = transaction->t_log_start;
+ } else if ((transaction = journal->j_running_transaction) != NULL) {
+ *tid = transaction->t_tid;
+ *block = journal->j_head;
+ } else {
+ *tid = journal->j_transaction_sequence;
+ *block = journal->j_head;
+ }
+ ret = tid_gt(*tid, journal->j_tail_sequence);
+ spin_unlock(&journal->j_list_lock);
+ read_unlock(&journal->j_state_lock);
+
+ return ret;
+}
+
+/*
+ * Update information in journal structure and in on disk journal superblock
+ * about log tail. This function does not check whether information passed in
+ * really pushes log tail further. It's responsibility of the caller to make
+ * sure provided log tail information is valid (e.g. by holding
+ * j_checkpoint_mutex all the time between computing log tail and calling this
+ * function as is the case with jbd2_cleanup_journal_tail()).
+ *
+ * Requires j_checkpoint_mutex
+ */
+void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
+{
+ unsigned long freed;
+
+ BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
+
+ /*
+ * We cannot afford for write to remain in drive's caches since as
+ * soon as we update j_tail, next transaction can start reusing journal
+ * space and if we lose sb update during power failure we'd replay
+ * old transaction with possibly newly overwritten data.
+ */
+ jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
+ write_lock(&journal->j_state_lock);
+ freed = block - journal->j_tail;
+ if (block < journal->j_tail)
+ freed += journal->j_last - journal->j_first;
+
+ trace_jbd2_update_log_tail(journal, tid, block, freed);
+ jbd_debug(1,
+ "Cleaning journal tail from %d to %d (offset %lu), "
+ "freeing %lu\n",
+ journal->j_tail_sequence, tid, block, freed);
+
+ journal->j_free += freed;
+ journal->j_tail_sequence = tid;
+ journal->j_tail = block;
+ write_unlock(&journal->j_state_lock);
+}
+
struct jbd2_stats_proc_session {
journal_t *journal;
struct transaction_stats_s *stats;
@@ -1156,16 +1235,28 @@ static int journal_reset(journal_t *jour
journal->j_errno);
journal->j_flags |= JBD2_FLUSHED;
} else {
- /* Add the dynamic fields and write it to disk. */
- jbd2_journal_update_sb_log_tail(journal);
+ /*
+ * Update log tail information. We use WRITE_FUA since new
+ * transaction will start reusing journal space and so we
+ * must make sure information about current log tail is on
+ * disk before that.
+ */
+ jbd2_journal_update_sb_log_tail(journal,
+ journal->j_tail_sequence,
+ journal->j_tail,
+ WRITE_FUA);
}
return jbd2_journal_start_thread(journal);
}
-static void jbd2_write_superblock(journal_t *journal)
+static void jbd2_write_superblock(journal_t *journal, int write_op)
{
struct buffer_head *bh = journal->j_sb_buffer;
+ int ret;
+ if (!(journal->j_flags & JBD2_BARRIER))
+ write_op &= ~(REQ_FUA | REQ_FLUSH);
+ lock_buffer(bh);
if (buffer_write_io_error(bh)) {
/*
* Oh, dear. A previous attempt to write the journal
@@ -1181,39 +1272,44 @@ static void jbd2_write_superblock(journa
clear_buffer_write_io_error(bh);
set_buffer_uptodate(bh);
}
-
- BUFFER_TRACE(bh, "marking dirty");
- mark_buffer_dirty(bh);
- sync_dirty_buffer(bh);
+ get_bh(bh);
+ bh->b_end_io = end_buffer_write_sync;
+ ret = submit_bh(write_op, bh);
+ wait_on_buffer(bh);
if (buffer_write_io_error(bh)) {
- printk(KERN_ERR "JBD2: I/O error detected "
- "when updating journal superblock for %s.\n",
- journal->j_devname);
clear_buffer_write_io_error(bh);
set_buffer_uptodate(bh);
+ ret = -EIO;
+ }
+ if (ret) {
+ printk(KERN_ERR "JBD2: Error %d detected when updating "
+ "journal superblock for %s.\n", ret,
+ journal->j_devname);
}
}
/**
* jbd2_journal_update_sb_log_tail() - Update log tail in journal sb on disk.
* @journal: The journal to update.
+ * @tail_tid: TID of the new transaction at the tail of the log
+ * @tail_block: The first block of the transaction at the tail of the log
+ * @write_op: With which operation should we write the journal sb
*
* Update a journal's superblock information about log tail and write it to
* disk, waiting for the IO to complete.
*/
-void jbd2_journal_update_sb_log_tail(journal_t *journal)
+void jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
+ unsigned long tail_block, int write_op)
{
journal_superblock_t *sb = journal->j_superblock;
- read_lock(&journal->j_state_lock);
- jbd_debug(1, "JBD2: updating superblock (start %ld, seq %d)\n",
- journal->j_tail, journal->j_tail_sequence);
+ jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
+ tail_block, tail_tid);
- sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
- sb->s_start = cpu_to_be32(journal->j_tail);
- read_unlock(&journal->j_state_lock);
+ sb->s_sequence = cpu_to_be32(tail_tid);
+ sb->s_start = cpu_to_be32(tail_block);
- jbd2_write_superblock(journal);
+ jbd2_write_superblock(journal, write_op);
/* Log is no longer empty */
write_lock(&journal->j_state_lock);
WARN_ON(!sb->s_sequence);
@@ -1240,7 +1336,7 @@ static void jbd2_mark_journal_empty(jour
sb->s_start = cpu_to_be32(0);
read_unlock(&journal->j_state_lock);
- jbd2_write_superblock(journal);
+ jbd2_write_superblock(journal, WRITE_FUA);
/* Log is no longer empty */
write_lock(&journal->j_state_lock);
@@ -1266,7 +1362,7 @@ static void jbd2_journal_update_sb_errno
sb->s_errno = cpu_to_be32(journal->j_errno);
read_unlock(&journal->j_state_lock);
- jbd2_write_superblock(journal);
+ jbd2_write_superblock(journal, WRITE_SYNC);
}
/*
--- a/fs/jbd2/recovery.c
+++ b/fs/jbd2/recovery.c
@@ -21,6 +21,7 @@
#include <linux/jbd2.h>
#include <linux/errno.h>
#include <linux/crc32.h>
+#include <linux/blkdev.h>
#endif
/*
@@ -265,7 +266,9 @@ int jbd2_journal_recover(journal_t *jour
err2 = sync_blockdev(journal->j_fs_dev);
if (!err)
err = err2;
-
+ /* Make sure all replayed data is on permanent storage */
+ if (journal->j_flags & JBD2_BARRIER)
+ blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
return err;
}
--- a/include/linux/jbd2.h
+++ b/include/linux/jbd2.h
@@ -972,6 +972,9 @@ extern void __journal_clean_data_list(tr
/* Log buffer allocation */
extern struct journal_head * jbd2_journal_get_descriptor_buffer(journal_t *);
int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
+int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
+ unsigned long *block);
+void __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
/* Commit management */
extern void jbd2_journal_commit_transaction(journal_t *);
@@ -1083,7 +1086,8 @@ extern int jbd2_journal_destroy (j
extern int jbd2_journal_recover (journal_t *journal);
extern int jbd2_journal_wipe (journal_t *, int);
extern int jbd2_journal_skip_recovery (journal_t *);
-extern void jbd2_journal_update_sb_log_tail (journal_t *);
+extern void jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
+ unsigned long, int);
extern void __jbd2_journal_abort_hard (journal_t *);
extern void jbd2_journal_abort (journal_t *, int);
extern int jbd2_journal_errno (journal_t *);
--- a/include/trace/events/jbd2.h
+++ b/include/trace/events/jbd2.h
@@ -200,7 +200,7 @@ TRACE_EVENT(jbd2_checkpoint_stats,
__entry->forced_to_close, __entry->written, __entry->dropped)
);
-TRACE_EVENT(jbd2_cleanup_journal_tail,
+TRACE_EVENT(jbd2_update_log_tail,
TP_PROTO(journal_t *journal, tid_t first_tid,
unsigned long block_nr, unsigned long freed),
next prev parent reply other threads:[~2015-08-10 10:33 UTC|newest]
Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-10 10:12 [PATCH 3.2 000/110] 3.2.71-rc1 review Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 002/110] [media] s5h1420: fix a buffer overflow when checking userspace params Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 001/110] hrtimer: Allow concurrent hrtimer_start() for self restarting timers Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 010/110] tty/serial: at91: RS485 mode: 0 is valid for delay_rts_after_send Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 016/110] usb: core: Fix USB 3.0 devices lost in NOTATTACHED state after a hub port reset Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 007/110] ASoC: wm8903: Fix define for WM8903_VMID_RES_250K Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 023/110] ath3k: add support of 13d3:3474 AR3012 device Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 021/110] ipr: Increase default adapter init stage change timeout Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 012/110] usb: dwc3: gadget: return error if command sent to DEPCMD register fails Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 017/110] staging: vt6655: device_rx_srv check sk_buff is NULL Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 020/110] SUNRPC: Fix a memory leak in the backchannel code Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 011/110] drm/radeon: take the mode_config mutex when dealing with hpds (v2) Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 024/110] ath9k: fix DMA stop sequence for AR9003+ Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 009/110] pktgen: adjust spacing in proc file interface output Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 026/110] regulator: core: fix constraints output buffer Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 025/110] cdc-acm: Add support of ATOL FPrint fiscal printers Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 022/110] ath3k: Add support of 0489:e076 AR3012 device Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 028/110] ASoC: wm8960: the enum of "DAC Polarity" should be wm8960_enum[1] Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 006/110] ASoC: wm8737: Fixup setting VMID Impedance control register Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 015/110] staging: rtl8712: prevent buffer overrun in recvbuf2recvframe Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 004/110] mtd: fix: avoid race condition when accessing mtd->usecount Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 018/110] fixing infinite OPEN loop in 4.0 stateid recovery Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 019/110] NFS: Fix size of NFSACL SETACL operations Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 027/110] dmaengine: mv_xor: bug fix for racing condition in descriptors cleanup Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 014/110] mtd: dc21285: use raw spinlock functions for nw_gpio_lock Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 003/110] [media] cx24116: fix a buffer overflow when checking userspace params Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 008/110] ASoC: wm8955: Fix setting wrong register for WM8955_K_8_0_MASK bits Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 013/110] rcu: Correctly handle non-empty Tiny RCU callback list with none ready Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 029/110] ext4: fix race between truncate and __ext4_journalled_writepage() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 005/110] crypto: talitos - avoid memleak in talitos_alg_alloc() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 087/110] libata: increase the timeout when setting transfer mode Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 102/110] Input: usbtouchscreen - avoid unresponsive TSC-30 touch screen Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 066/110] 9p: forgetting to cancel request on interrupted zero-copy RPC Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 099/110] xhci: do not report PLC when link is in internal resume state Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 084/110] libata: add ATA_HORKAGE_BROKEN_FPDMA_AA quirk for HP 250GB SATA disk VB0250EAVER Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 035/110] ideapad: fix software rfkill setting Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 093/110] inet: frags: fix defragmented packet's IP header for af_packet Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 036/110] mmc: card: Fixup request missing in mmc_blk_issue_rw_rq Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 078/110] net: call rcu_read_lock early in process_backlog Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 097/110] xhci: Calculate old endpoints correctly on device reset Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 043/110] watchdog: omap: assert the counter being stopped before reprogramming Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 100/110] usb-storage: ignore ZTE MF 823 card reader in mode 0x1225 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 060/110] fs/buffer.c: support buffer cache allocations with gfp modifiers Ben Hutchings
2015-08-27 13:57 ` Luis Henriques
2015-08-10 10:12 ` [PATCH 3.2 092/110] mac80211: clear subdir_stations when removing debugfs Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 085/110] libata: add ATA_HORKAGE_NOTRIM Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 039/110] Bluetooth: ath3k: Add support of 04ca:300d AR3012 device Ben Hutchings
2015-08-10 22:01 ` Dmitry Tunin
2015-08-10 10:12 ` [PATCH 3.2 106/110] vhost: actually track log eventfd file Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 030/110] Disable write buffering on Toshiba ToPIC95 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 090/110] NET: AX.25: Stop heartbeat timer on disconnect Ben Hutchings
2015-08-10 11:52 ` Richard Stearn
2015-08-11 20:13 ` Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 052/110] __bitmap_parselist: fix bug in empty string handling Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 057/110] fuse: initialize fc->release before calling it Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 091/110] drm/radeon: Don't flush the GART TLB if rdev->gart.ptr == NULL Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 077/110] net: do not process device backlog during unregistration Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 065/110] KVM: x86: properly restore LVT0 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 055/110] Btrfs: fix race between caching kthread and returning inode to inode cache Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 070/110] USB: cp210x: add ID for Aruba Networks controllers Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 044/110] NET: ROSE: Don't dereference NULL neighbour pointer Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 107/110] ALSA: usb-audio: add dB range mapping for some devices Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 068/110] dm btree remove: fix bug in redistribute3 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 079/110] 9p: don't leave a half-initialized inode sitting around Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 046/110] fs: Fix S_NOSEC handling Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 054/110] Btrfs: use kmem_cache_free when freeing entry in inode cache Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 067/110] ext4: replace open coded nofail allocation in ext4_free_blocks() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 053/110] agp/intel: Fix typo in needs_ilk_vtd_wa() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 033/110] jbd2: use GFP_NOFS in jbd2_cleanup_journal_tail() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 089/110] net: Clone skb before setting peeked flag Ben Hutchings
2015-08-10 11:37 ` Konstantin Khlebnikov
2015-08-10 18:15 ` David Miller
2015-08-11 18:24 ` Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 049/110] dell-laptop: Fix allocating & freeing SMI buffer page Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 104/110] iscsi-target: Fix use-after-free during TPG session shutdown Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 072/110] s390/sclp: clear upper register halves in _sclp_print_early Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 081/110] Btrfs: fix file corruption after cloning inline extents Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 047/110] stmmac: troubleshoot unexpected bits in des0 & des1 Ben Hutchings
2015-08-10 10:23 ` Alexey Brodkin
2015-08-11 20:19 ` Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 042/110] ext4: don't retry file block mapping on bigalloc fs with non-extent file Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 051/110] tracing/filter: Do not allow infix to exceed end of string Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 061/110] bufferhead: Add _gfp version for sb_getblk() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 048/110] mm: kmemleak: allow safe memory scanning during kmemleak disabling Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 031/110] jbd2: split updating of journal superblock and marking journal empty Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 095/110] netfilter: nf_conntrack: Support expectations in different zones Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 040/110] ext4: call sync_blockdev() before invalidate_bdev() in put_super() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 041/110] iio: DAC: ad5624r_spi: fix bit shift of output data value Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 080/110] s390/process: fix sfpc inline assembly Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 069/110] dm thin: allocate the cell_sort_array dynamically Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 088/110] datagram: Factor out sk queue referencing Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 096/110] usb: xhci: Bugfix for NULL pointer deference in xhci_endpoint_init() function Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 058/110] ALSA: usb-audio: Add MIDI support for Steinberg MI2/MI4 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 074/110] drm: add a check for x/y in drm_mode_setcrtc Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 086/110] libata: force disable trim for SuperSSpeed S238 Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 101/110] tile: use free_bootmem_late() for initrd Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 094/110] usb: dwc3: Reset the transfer resource index on SET_INTERFACE Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 045/110] bridge: multicast: restore router configuration on port link down/up Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 109/110] x86/xen: Probe target addresses in set_aliased_prot() before the hypercall Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 071/110] dm btree: silence lockdep lock inversion in dm_btree_del() Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 105/110] niu: don't count tx error twice in case of headroom realloc fails Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 083/110] ata: pmp: add quirk for Marvell 4140 SATA PMP Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 059/110] ACPICA: Tables: Fix an issue that FACS initialization is performed twice Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 037/110] nfs: increase size of EXCHANGE_ID name string buffer Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 110/110] x86/ldt: Make modify_ldt synchronous Ben Hutchings
2015-08-10 16:47 ` Andy Lutomirski
2015-08-11 18:23 ` Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 082/110] rds: rds_ib_device.refcount overflow Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 108/110] drm/radeon/combios: add some validation of lvds values Ben Hutchings
2015-08-10 10:12 ` Ben Hutchings [this message]
2015-08-10 10:12 ` [PATCH 3.2 063/110] netfilter: bridge: don't leak skb in error paths Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 098/110] xhci: report U3 when link is in resume state Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 038/110] Bluetooth: ath3k: add support of 04ca:300f AR3012 device Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 064/110] KVM: x86: make vapics_in_nmi_mode atomic Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 076/110] mm: avoid setting up anonymous pages into file mapping Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 034/110] jbd2: fix ocfs2 corrupt when updating journal superblock fails Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 056/110] crush: fix a bug in tree bucket decode Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 062/110] ext4: avoid deadlocks in the writeback path by using sb_getblk_gfp Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 075/110] rtnetlink: verify IFLA_VF_INFO attributes before passing them to driver Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 050/110] tracing/filter: Do not WARN on operand count going below zero Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 073/110] drm: Check crtc x and y coordinates Ben Hutchings
2015-08-10 10:12 ` [PATCH 3.2 103/110] md/raid1: fix test for 'was read error from last working device' Ben Hutchings
2015-08-10 16:10 ` [PATCH 3.2 000/110] 3.2.71-rc1 review Guenter Roeck
2015-08-11 20:34 ` Ben Hutchings
2015-08-11 19:21 ` Jonathan Toppins
2015-08-11 19:29 ` 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=lsq.1439201551.592198876@decadent.org.uk \
--to=ben@decadent.org.uk \
--cc=akpm@linux-foundation.org \
--cc=jack@suse.cz \
--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
all inboxes | Powered by JetHome®