public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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,
	Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>,
	Jan Kara <jack@suse.cz>,
	linux-ext4@vger.kernel.org
Subject: [patch 16/83] jbd: fix error handling for checkpoint io
Date: Thu, 11 Dec 2008 11:14:04 -0800	[thread overview]
Message-ID: <20081211191404.GP5894@kroah.com> (raw)
In-Reply-To: <20081211191014.GA5759@suse.de>

[-- Attachment #1: jbd-fix-error-handling-for-checkpoint-io.patch --]
[-- Type: text/plain, Size: 10443 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>

commit 4afe978530702c934dfdb11f54073136818b2119 upstream.

When a checkpointing IO fails, current JBD code doesn't check the error
and continue journaling.  This means latest metadata can be lost from both
the journal and filesystem.

This patch leaves the failed metadata blocks in the journal space and
aborts journaling in the case of log_do_checkpoint().  To achieve this, we
need to do:

1. don't remove the failed buffer from the checkpoint list where in
   the case of __try_to_free_cp_buf() because it may be released or
   overwritten by a later transaction
2. log_do_checkpoint() is the last chance, remove the failed buffer
   from the checkpoint list and abort the journal
3. when checkpointing fails, don't update the journal super block to
   prevent the journaled contents from being cleaned.  For safety,
   don't update j_tail and j_tail_sequence either
4. when checkpointing fails, notify this error to the ext3 layer so
   that ext3 don't clear the needs_recovery flag, otherwise the
   journaled contents are ignored and cleaned in the recovery phase
5. if the recovery fails, keep the needs_recovery flag
6. prevent cleanup_journal_tail() from being called between
   __journal_drop_transaction() and journal_abort() (a race issue
   between journal_flush() and __log_wait_for_space()

Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com>
Acked-by: Jan Kara <jack@suse.cz>
Cc: <linux-ext4@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 fs/jbd/checkpoint.c |   49 +++++++++++++++++++++++++++++++++++++------------
 fs/jbd/journal.c    |   28 ++++++++++++++++++++++------
 fs/jbd/recovery.c   |    7 +++++--
 include/linux/jbd.h |    2 +-
 4 files changed, 65 insertions(+), 21 deletions(-)

--- a/fs/jbd/checkpoint.c
+++ b/fs/jbd/checkpoint.c
@@ -93,7 +93,8 @@ static int __try_to_free_cp_buf(struct j
 	int ret = 0;
 	struct buffer_head *bh = jh2bh(jh);
 
-	if (jh->b_jlist == BJ_None && !buffer_locked(bh) && !buffer_dirty(bh)) {
+	if (jh->b_jlist == BJ_None && !buffer_locked(bh) &&
+	    !buffer_dirty(bh) && buffer_uptodate(bh)) {
 		JBUFFER_TRACE(jh, "remove from checkpoint list");
 		ret = __journal_remove_checkpoint(jh) + 1;
 		jbd_unlock_bh_state(bh);
@@ -160,21 +161,25 @@ static void jbd_sync_bh(journal_t *journ
  * buffers. Note that we take the buffers in the opposite ordering
  * from the one in which they were submitted for IO.
  *
+ * Return 0 on success, and return <0 if some buffers have failed
+ * to be written out.
+ *
  * Called with j_list_lock held.
  */
-static void __wait_cp_io(journal_t *journal, transaction_t *transaction)
+static int __wait_cp_io(journal_t *journal, transaction_t *transaction)
 {
 	struct journal_head *jh;
 	struct buffer_head *bh;
 	tid_t this_tid;
 	int released = 0;
+	int ret = 0;
 
 	this_tid = transaction->t_tid;
 restart:
 	/* Did somebody clean up the transaction in the meanwhile? */
 	if (journal->j_checkpoint_transactions != transaction ||
 			transaction->t_tid != this_tid)
-		return;
+		return ret;
 	while (!released && transaction->t_checkpoint_io_list) {
 		jh = transaction->t_checkpoint_io_list;
 		bh = jh2bh(jh);
@@ -194,6 +199,9 @@ restart:
 			spin_lock(&journal->j_list_lock);
 			goto restart;
 		}
+		if (unlikely(!buffer_uptodate(bh)))
+			ret = -EIO;
+
 		/*
 		 * Now in whatever state the buffer currently is, we know that
 		 * it has been written out and so we can drop it from the list
@@ -203,6 +211,8 @@ restart:
 		journal_remove_journal_head(bh);
 		__brelse(bh);
 	}
+
+	return ret;
 }
 
 #define NR_BATCH	64
@@ -226,7 +236,8 @@ __flush_batch(journal_t *journal, struct
  * Try to flush one buffer from the checkpoint list to disk.
  *
  * Return 1 if something happened which requires us to abort the current
- * scan of the checkpoint list.
+ * scan of the checkpoint list.  Return <0 if the buffer has failed to
+ * be written out.
  *
  * Called with j_list_lock held and drops it if 1 is returned
  * Called under jbd_lock_bh_state(jh2bh(jh)), and drops it
@@ -256,6 +267,9 @@ static int __process_buffer(journal_t *j
 		log_wait_commit(journal, tid);
 		ret = 1;
 	} else if (!buffer_dirty(bh)) {
+		ret = 1;
+		if (unlikely(!buffer_uptodate(bh)))
+			ret = -EIO;
 		J_ASSERT_JH(jh, !buffer_jbddirty(bh));
 		BUFFER_TRACE(bh, "remove from checkpoint");
 		__journal_remove_checkpoint(jh);
@@ -263,7 +277,6 @@ static int __process_buffer(journal_t *j
 		jbd_unlock_bh_state(bh);
 		journal_remove_journal_head(bh);
 		__brelse(bh);
-		ret = 1;
 	} else {
 		/*
 		 * Important: we are about to write the buffer, and
@@ -295,6 +308,7 @@ static int __process_buffer(journal_t *j
  * to disk. We submit larger chunks of data at once.
  *
  * The journal should be locked before calling this function.
+ * Called with j_checkpoint_mutex held.
  */
 int log_do_checkpoint(journal_t *journal)
 {
@@ -318,6 +332,7 @@ int log_do_checkpoint(journal_t *journal
 	 * OK, we need to start writing disk blocks.  Take one transaction
 	 * and write it.
 	 */
+	result = 0;
 	spin_lock(&journal->j_list_lock);
 	if (!journal->j_checkpoint_transactions)
 		goto out;
@@ -334,7 +349,7 @@ restart:
 		int batch_count = 0;
 		struct buffer_head *bhs[NR_BATCH];
 		struct journal_head *jh;
-		int retry = 0;
+		int retry = 0, err;
 
 		while (!retry && transaction->t_checkpoint_list) {
 			struct buffer_head *bh;
@@ -347,6 +362,8 @@ restart:
 				break;
 			}
 			retry = __process_buffer(journal, jh, bhs,&batch_count);
+			if (retry < 0 && !result)
+				result = retry;
 			if (!retry && (need_resched() ||
 				spin_needbreak(&journal->j_list_lock))) {
 				spin_unlock(&journal->j_list_lock);
@@ -371,14 +388,18 @@ restart:
 		 * Now we have cleaned up the first transaction's checkpoint
 		 * list. Let's clean up the second one
 		 */
-		__wait_cp_io(journal, transaction);
+		err = __wait_cp_io(journal, transaction);
+		if (!result)
+			result = err;
 	}
 out:
 	spin_unlock(&journal->j_list_lock);
-	result = cleanup_journal_tail(journal);
 	if (result < 0)
-		return result;
-	return 0;
+		journal_abort(journal, result);
+	else
+		result = cleanup_journal_tail(journal);
+
+	return (result < 0) ? result : 0;
 }
 
 /*
@@ -394,8 +415,9 @@ out:
  * This is the only part of the journaling code which really needs to be
  * aware of transaction aborts.  Checkpointing involves writing to the
  * main filesystem area rather than to the journal, so it can proceed
- * even in abort state, but we must not update the journal superblock if
- * we have an abort error outstanding.
+ * even in abort state, but we must not update the super block if
+ * checkpointing may have failed.  Otherwise, we would lose some metadata
+ * buffers which should be written-back to the filesystem.
  */
 
 int cleanup_journal_tail(journal_t *journal)
@@ -404,6 +426,9 @@ int cleanup_journal_tail(journal_t *jour
 	tid_t		first_tid;
 	unsigned long	blocknr, freed;
 
+	if (is_journal_aborted(journal))
+		return 1;
+
 	/* OK, work out the oldest transaction remaining in the log, and
 	 * the log block it starts at.
 	 *
--- a/fs/jbd/journal.c
+++ b/fs/jbd/journal.c
@@ -1121,9 +1121,12 @@ recovery_error:
  *
  * Release a journal_t structure once it is no longer in use by the
  * journaled object.
+ * Return <0 if we couldn't clean up the journal.
  */
-void journal_destroy(journal_t *journal)
+int journal_destroy(journal_t *journal)
 {
+	int err = 0;
+
 	/* Wait for the commit thread to wake up and die. */
 	journal_kill_thread(journal);
 
@@ -1146,11 +1149,16 @@ void journal_destroy(journal_t *journal)
 	J_ASSERT(journal->j_checkpoint_transactions == NULL);
 	spin_unlock(&journal->j_list_lock);
 
-	/* We can now mark the journal as empty. */
-	journal->j_tail = 0;
-	journal->j_tail_sequence = ++journal->j_transaction_sequence;
 	if (journal->j_sb_buffer) {
-		journal_update_superblock(journal, 1);
+		if (!is_journal_aborted(journal)) {
+			/* We can now mark the journal as empty. */
+			journal->j_tail = 0;
+			journal->j_tail_sequence =
+				++journal->j_transaction_sequence;
+			journal_update_superblock(journal, 1);
+		} else {
+			err = -EIO;
+		}
 		brelse(journal->j_sb_buffer);
 	}
 
@@ -1160,6 +1168,8 @@ void journal_destroy(journal_t *journal)
 		journal_destroy_revoke(journal);
 	kfree(journal->j_wbuf);
 	kfree(journal);
+
+	return err;
 }
 
 
@@ -1359,10 +1369,16 @@ int journal_flush(journal_t *journal)
 	spin_lock(&journal->j_list_lock);
 	while (!err && journal->j_checkpoint_transactions != NULL) {
 		spin_unlock(&journal->j_list_lock);
+		mutex_lock(&journal->j_checkpoint_mutex);
 		err = log_do_checkpoint(journal);
+		mutex_unlock(&journal->j_checkpoint_mutex);
 		spin_lock(&journal->j_list_lock);
 	}
 	spin_unlock(&journal->j_list_lock);
+
+	if (is_journal_aborted(journal))
+		return -EIO;
+
 	cleanup_journal_tail(journal);
 
 	/* Finally, mark the journal as really needing no recovery.
@@ -1384,7 +1400,7 @@ int journal_flush(journal_t *journal)
 	J_ASSERT(journal->j_head == journal->j_tail);
 	J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
 	spin_unlock(&journal->j_state_lock);
-	return err;
+	return 0;
 }
 
 /**
--- a/fs/jbd/recovery.c
+++ b/fs/jbd/recovery.c
@@ -223,7 +223,7 @@ do {									\
  */
 int journal_recover(journal_t *journal)
 {
-	int			err;
+	int			err, err2;
 	journal_superblock_t *	sb;
 
 	struct recovery_info	info;
@@ -261,7 +261,10 @@ int journal_recover(journal_t *journal)
 	journal->j_transaction_sequence = ++info.end_transaction;
 
 	journal_clear_revoke(journal);
-	sync_blockdev(journal->j_fs_dev);
+	err2 = sync_blockdev(journal->j_fs_dev);
+	if (!err)
+		err = err2;
+
 	return err;
 }
 
--- a/include/linux/jbd.h
+++ b/include/linux/jbd.h
@@ -908,7 +908,7 @@ extern int	   journal_set_features
 		   (journal_t *, unsigned long, unsigned long, unsigned long);
 extern int	   journal_create     (journal_t *);
 extern int	   journal_load       (journal_t *journal);
-extern void	   journal_destroy    (journal_t *);
+extern int	   journal_destroy    (journal_t *);
 extern int	   journal_recover    (journal_t *journal);
 extern int	   journal_wipe       (journal_t *, int);
 extern int	   journal_skip_recovery	(journal_t *);


  parent reply	other threads:[~2008-12-11 19:23 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081211190201.612240183@mini.kroah.org>
2008-12-11 19:10 ` [patch 00/83] 2.6.27.9-stable review Greg KH
2008-12-11 19:13   ` [patch 01/83] libata: improve phantom device detection Greg KH
2008-12-11 19:13   ` [patch 02/83] af_unix: netns: fix problem of return value Greg KH
2008-12-11 19:13   ` [patch 03/83] cxgb3: Fix kernel crash caused by uninitialized l2t_entry.arpq Greg KH
2008-12-11 21:12     ` Stefan Lippers-Hollmann
2008-12-11 23:41       ` Greg KH
2008-12-12  3:49         ` David Miller
2008-12-12  4:00       ` Greg KH
2008-12-12  5:11         ` David Miller
2008-12-11 19:13   ` [patch 04/83] niu: Fix readq implementation when architecture does not provide one Greg KH
2008-12-11 19:13   ` [patch 05/83] pppol2tp: Add missing sock_put() in pppol2tp_release() Greg KH
2008-12-11 19:13   ` [patch 06/83] udp: multicast packets need to check namespace Greg KH
2008-12-11 19:13   ` [patch 07/83] sparc64: Fix offset calculation in compute_size() Greg KH
2008-12-11 19:13   ` [patch 08/83] sparc64: Fix __copy_{to,from}_user_inatomic defines Greg KH
2008-12-11 19:13   ` [patch 09/83] sparc64: Fix PCI resource mapping on sparc64 Greg KH
2008-12-11 19:13   ` [patch 10/83] sparc64: Fix bug in PTRACE_SETFPREGS64 handling Greg KH
2008-12-11 19:13   ` [patch 11/83] sparc64: Fix VIS emulation bugs Greg KH
2008-12-11 19:13   ` [patch 12/83] sparc64: Sync FPU state in VIS emulation handler Greg KH
2008-12-11 19:13   ` [patch 13/83] Enforce a minimum SG_IO timeout Greg KH
2008-12-11 19:14   ` [patch 14/83] Fix a race condition in FASYNC handling Greg KH
2008-12-11 19:14   ` [patch 15/83] ACPI suspend: Blacklist boxes that require us to set SCI_EN directly on resume Greg KH
2008-12-11 19:14   ` Greg KH [this message]
2008-12-11 19:14   ` [patch 17/83] jbd: test BH_Write_EIO to detect errors on metadata buffers Greg KH
2008-12-11 19:14   ` [patch 18/83] spi: avoid spidev crash when device is removed Greg KH
2008-12-11 19:14   ` [patch 19/83] ATM: CVE-2008-5079: duplicate listen() on socket corrupts the vcc table Greg KH
2008-12-11 19:14   ` [patch 20/83] powerpc/mpic: Dont reset affinity for secondary MPIC on boot Greg KH
2008-12-11 19:14   ` [patch 21/83] Input: i8042 - add Thinkpad R31 to nomux list Greg KH
2008-12-11 19:14   ` [patch 22/83] Input: i8042 - add Blue FB5601 to noloop exception table Greg KH
2008-12-11 19:14   ` [patch 23/83] Input: i8042 - add Dell XPS M1530 to nomux list Greg KH
2008-12-11 19:14   ` [patch 24/83] Input: i8042 - add Compal Hel80 laptop to nomux blacklist Greg KH
2008-12-11 19:14   ` [patch 25/83] edac: fix enabling of polling cell module Greg KH
2008-12-11 19:14   ` [patch 26/83] USB: option: add Ericsson F3507g and Dell 5530 Greg KH
2008-12-11 19:14   ` [patch 27/83] USB: option.c remove duplicate device ids now supported in hso.c Greg KH
2008-12-11 19:14   ` [patch 28/83] USB: Option / AnyData new modem, same ID Greg KH
2008-12-11 19:14   ` [patch 29/83] USB: option: add Pantech cards Greg KH
2008-12-11 19:14   ` [patch 30/83] USB: add ZTE MF626 USB GSM modem entry Greg KH
2008-12-11 19:14   ` [patch 31/83] USB: support Huawei data card product IDs Greg KH
2008-12-11 19:14   ` [patch 32/83] USB: Add YISO u893 usb modem vendor and product IDs to option driver Greg KH
2008-12-11 19:14   ` [patch 33/83] USB: serial: add more Onda device ids " Greg KH
2008-12-11 19:14   ` [patch 34/83] USB: unusual-devs: support Huawei data card product IDs Greg KH
2008-12-11 19:14   ` [patch 35/83] USB: Unusual dev for Mio moov 330 gps Greg KH
2008-12-11 19:14   ` [patch 36/83] USB: Unusual dev for the "Kyocera / Contax SL300R T*" digital camera Greg KH
2008-12-11 19:14   ` [patch 37/83] USB: add Nikon D300 camera to unusual_devs Greg KH
2008-12-11 19:29     ` Chris Wedgwood
2008-12-11 19:51       ` Alan Stern
2008-12-11 23:42       ` Greg KH
2008-12-11 19:14   ` [patch 38/83] USB: unusual devs patch for Nokia 7610 Supernova Greg KH
2008-12-11 19:14   ` [patch 39/83] USB: storage: updates unusual_devs entry for the Nokia 6300 Greg KH
2008-12-11 19:15   ` [patch 40/83] USB: storage: update unusual_devs entries for Nokia 5300 and 5310 Greg KH
2008-12-11 19:15   ` [patch 41/83] USB: storage: unusual_devs entry for Mio C520-GPS Greg KH
2008-12-11 19:15   ` [patch 42/83] USB: usb-storage: unusual_devs entry for Nikon D2H Greg KH
2008-12-11 19:15   ` [patch 43/83] ALSA: HDA: hda_proc: Fix printf format specifier Greg KH
2008-12-11 19:15   ` [patch 44/83] ALSA: hda - Fix sound on NEC Versa S9100 Greg KH
2008-12-11 19:15   ` [patch 45/83] ALSA: hda: Add support for ECS/PC Chips boards with Sigmatel codecs Greg KH
2008-12-11 19:15   ` [patch 46/83] ALSA: hda - Fix ALC269 capture source Greg KH
2008-12-11 19:15   ` [patch 47/83] ALSA: hda - Add model for Toshiba L305 laptop Greg KH
2008-12-11 19:15   ` [patch 48/83] ALSA: hda: fixed hp_nid DAC for DELL_M6 Greg KH
2008-12-11 19:15   ` [patch 49/83] ALSA: HDA: patch_analog: Fix SPDIF output on AD1989B Greg KH
2008-12-11 19:15   ` [patch 50/83] ALSA: HDA: patch_analog: Quirk for Asus P5Q Premium/Pro boards Greg KH
2008-12-11 19:15   ` [patch 51/83] ALSA: hda: appletv support Greg KH
2008-12-11 19:15   ` [patch 52/83] ALSA: hda - Fix another ALC889A (rev 0x100101) Greg KH
2008-12-11 19:15   ` [patch 53/83] ALSA: hda - Add ALC887 support Greg KH
2008-12-11 19:15   ` [patch 54/83] ALSA: hda - Add support of ALC272 Greg KH
2008-12-11 19:15   ` [patch 55/83] ALSA: hda - Restore default pin configs for realtek codecs Greg KH
2008-12-11 19:15   ` [patch 56/83] ALSA: hda - Add another HP model for AD1884A Greg KH
2008-12-11 19:15   ` [patch 57/83] ALSA: hda - Add a quirk for another Acer Aspire (1025:0090) Greg KH
2008-12-11 19:15   ` [patch 58/83] ALSA: hda - Add a quirk for MEDION MD96630 Greg KH
2008-12-11 19:15   ` [patch 59/83] ALSA: hda - Add another HP model (6730s) for AD1884A Greg KH
2008-12-11 19:16   ` [patch 60/83] ALSA: hda - Make the HP EliteBook 8530p use AD1884A model laptop Greg KH
2008-12-11 19:16   ` [patch 61/83] ALSA: hda - Add a quirk for Dell Studio 15 Greg KH
2008-12-11 19:16   ` [patch 62/83] ALSA: hda - No Headphone as Line-out swich without line-outs Greg KH
2008-12-11 19:16   ` [patch 63/83] ALSA: hda - mark Dell studio 1535 quirk Greg KH
2008-12-11 19:16   ` [patch 64/83] ALSA: emu10k1 - Add more invert_shared_spdif flag to Audigy models Greg KH
2008-12-11 19:16   ` [patch 65/83] cxgb3 - fix race in EEH Greg KH
2008-12-11 19:16   ` [patch 66/83] cxgb3 - remove duplicate tests in lro Greg KH
2008-12-11 19:16   ` [patch 67/83] sched: fix a bug in sched domain degenerate Greg KH
2008-12-11 19:16   ` [patch 68/83] x86: HPET: convert WARN_ON to WARN_ON_ONCE Greg KH
2008-12-17 11:26     ` Matt Fleming
2008-12-17 11:33       ` Takashi Iwai
2008-12-17 12:03         ` Matt Fleming
2008-12-17 18:42           ` Greg KH
2008-12-17 19:51             ` Matt Fleming
2008-12-17 19:54               ` Greg KH
2008-12-18 11:37             ` Thomas Gleixner
2008-12-18 19:01               ` Greg KH
2008-12-11 19:16   ` [patch 69/83] x86, memory hotplug: remove wrong -1 in calling init_memory_mapping() Greg KH
2008-12-11 19:16   ` [patch 70/83] x86: remove debug code from arch_add_memory() Greg KH
2008-12-11 19:16   ` [patch 71/83] sched: CPU remove deadlock fix Greg KH
2008-12-11 19:16   ` [patch 72/83] PCI: stop leaking slot_name in pci_create_slot Greg KH
2008-12-11 19:16   ` [patch 73/83] PCIe: ASPM: Break out of endless loop waiting for PCI config bits to switch Greg KH
2008-12-11 19:16   ` [patch 74/83] uml: boot broken due to buffer overrun Greg KH
2008-12-11 19:16   ` [patch 75/83] pagemap: fix 32-bit pagemap regression Greg KH
2008-12-11 19:16   ` [patch 76/83] fix mapping_writably_mapped() Greg KH
2008-12-11 19:16   ` [patch 77/83] atv: hid quirk for appletv IR receiver Greg KH
2008-12-11 19:16   ` [patch 78/83] Allow recursion in binfmt_script and binfmt_misc Greg KH
2008-12-11 19:16   ` [patch 79/83] tracehook: exec double-reporting fix Greg KH
2008-12-11 19:16   ` [patch 80/83] powerpc/virtex5: Fix Virtex5 machine check handling Greg KH
2008-12-11 19:16   ` [patch 81/83] ACPI: delete OSI(Linux) DMI dmesg spam Greg KH
2008-12-11 19:16   ` [patch 82/83] cifs: fix a regression in cifs umount codepath Greg KH
2008-12-11 19:16   ` [patch 83/83] pnp: make the resource type an unsigned long Greg KH
2008-12-12  5:19   ` [stable] [patch 00/83] 2.6.27.9-stable review Greg KH
2008-12-12  5:21   ` [patch 84/83] powerpc: Use cpu_thread_in_core in smp_init for of_spin_map Greg KH
2008-12-12  5:24   ` [patch 85/83] XFS: Fix hang after disallowed rename across directory quota domains Greg KH
2008-12-13  9:29   ` [patch 00/83] 2.6.27.9-stable review François Valenduc
2008-12-16 23:25     ` Greg KH
2008-12-17 18:58       ` François Valenduc
2008-12-18 19:00         ` 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=20081211191404.GP5894@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=hidehiro.kawai.ez@hitachi.com \
    --cc=jack@suse.cz \
    --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