[kernel] r18853 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/all/stable patches/debian patches/features/all/xen patches/series

Ben Hutchings benh at alioth.debian.org
Sun Mar 18 22:42:18 UTC 2012


Author: benh
Date: Sun Mar 18 22:42:15 2012
New Revision: 18853

Log:
Add longterm 2.6.32.59

Fix up xen pvops.patch.
Revert an ABI-breaking change.

Added:
   dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch
   dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch
Modified:
   dists/squeeze/linux-2.6/debian/changelog
   dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch
   dists/squeeze/linux-2.6/debian/patches/series/42

Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog	Sun Mar 18 03:56:27 2012	(r18852)
+++ dists/squeeze/linux-2.6/debian/changelog	Sun Mar 18 22:42:15 2012	(r18853)
@@ -48,6 +48,15 @@
     and the bug report which this closes: #662573.
   * ia64: Define is_compat_task(), now needed by autofs
   * e1000e: workaround for packet drop on 82579 at 100Mbps (Closes: #644906)
+  * Add longterm release 2.6.32.59, including:
+    - eCryptfs: Handle failed metadata read in lookup
+    - cifs: fix dentry refcount leak when opening a FIFO on lookup
+    - regset: Prevent null pointer reference on readonly regsets
+      (CVE-2012-1097)
+    - [i386] watchdog: hpwdt: clean up set_memory_x call for 32 bit
+    For the complete list of changes, see:
+     http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.59
+    and the bug report which this closes: #663534.
 
  -- Uwe Kleine-König <u.kleine-koenig at pengutronix.de>  Mon, 16 Jan 2012 16:47:21 +0100
 

Added: dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/all/stable/2.6.32.59.patch	Sun Mar 18 22:42:15 2012	(r18853)
@@ -0,0 +1,406 @@
+diff --git a/Makefile b/Makefile
+index ed78982..3a9a721 100644
+diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
+index 1ee596c..20fc9c5 100644
+--- a/arch/ia64/Kconfig
++++ b/arch/ia64/Kconfig
+@@ -502,23 +502,6 @@ config ARCH_PROC_KCORE_TEXT
+ 	def_bool y
+ 	depends on PROC_KCORE
+ 
+-config IA32_SUPPORT
+-	bool "Support for Linux/x86 binaries"
+-	help
+-	  IA-64 processors can execute IA-32 (X86) instructions.  By
+-	  saying Y here, the kernel will include IA-32 system call
+-	  emulation support which makes it possible to transparently
+-	  run IA-32 Linux binaries on an IA-64 Linux system.
+-	  If in doubt, say Y.
+-
+-config COMPAT
+-	bool
+-	depends on IA32_SUPPORT
+-	default y
+-
+-config COMPAT_FOR_U64_ALIGNMENT
+-	def_bool COMPAT
+-
+ config IA64_MCA_RECOVERY
+ 	tristate "MCA recovery from errors other than TLB."
+ 
+diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
+index 43c0aca..aca7fff 100644
+--- a/arch/s390/Kconfig
++++ b/arch/s390/Kconfig
+@@ -188,6 +188,9 @@ config SYSVIPC_COMPAT
+ 	depends on COMPAT && SYSVIPC
+ 	default y
+ 
++config KEYS_COMPAT
++	def_bool y if COMPAT && KEYS
++
+ config AUDIT_ARCH
+ 	bool
+ 	default y
+diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
+index 0b2573a..358e545 100644
+--- a/arch/s390/kernel/setup.c
++++ b/arch/s390/kernel/setup.c
+@@ -57,6 +57,7 @@
+ #include <asm/ptrace.h>
+ #include <asm/sections.h>
+ #include <asm/ebcdic.h>
++#include <asm/compat.h>
+ #include <asm/kvm_virtio.h>
+ 
+ long psw_kernel_bits	= (PSW_BASE_BITS | PSW_MASK_DAT | PSW_ASC_PRIMARY |
+diff --git a/block/bsg.c b/block/bsg.c
+index 7154a7a..e3e3241 100644
+--- a/block/bsg.c
++++ b/block/bsg.c
+@@ -977,7 +977,8 @@ void bsg_unregister_queue(struct request_queue *q)
+ 
+ 	mutex_lock(&bsg_mutex);
+ 	idr_remove(&bsg_minor_idr, bcd->minor);
+-	sysfs_remove_link(&q->kobj, "bsg");
++	if (q->kobj.sd)
++		sysfs_remove_link(&q->kobj, "bsg");
+ 	device_unregister(bcd->class_dev);
+ 	bcd->class_dev = NULL;
+ 	kref_put(&bcd->ref, bsg_kref_release_function);
+diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
+index a2e8977..605d92e 100644
+--- a/drivers/block/xen-blkfront.c
++++ b/drivers/block/xen-blkfront.c
+@@ -942,11 +942,11 @@ static void blkfront_closing(struct xenbus_device *dev)
+ 	/* Flush gnttab callback work. Must be done with no locks held. */
+ 	flush_scheduled_work();
+ 
++	del_gendisk(info->gd);
++
+ 	blk_cleanup_queue(info->rq);
+ 	info->rq = NULL;
+ 
+-	del_gendisk(info->gd);
+-
+  out:
+ 	xenbus_frontend_closed(dev);
+ }
+diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
+index ca5ca5a..da33dce 100644
+--- a/drivers/net/usb/usbnet.c
++++ b/drivers/net/usb/usbnet.c
+@@ -584,6 +584,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
+ 		entry = (struct skb_data *) skb->cb;
+ 		urb = entry->urb;
+ 
++		spin_unlock_irqrestore(&q->lock, flags);
+ 		// during some PM-driven resume scenarios,
+ 		// these (async) unlinks complete immediately
+ 		retval = usb_unlink_urb (urb);
+@@ -591,6 +592,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
+ 			devdbg (dev, "unlink urb err, %d", retval);
+ 		else
+ 			count++;
++		spin_lock_irqsave(&q->lock, flags);
+ 	}
+ 	spin_unlock_irqrestore (&q->lock, flags);
+ 	return count;
+diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
+index 2a9f54a..1f6bb28 100644
+--- a/drivers/watchdog/hpwdt.c
++++ b/drivers/watchdog/hpwdt.c
+@@ -220,7 +220,7 @@ static int __devinit cru_detect(unsigned long map_entry,
+ 
+ 	cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
+ 
+-	set_memory_x((unsigned long)bios32_entrypoint, (2 * PAGE_SIZE));
++	set_memory_x((unsigned long)bios32_map, 2);
+ 	asminline_call(&cmn_regs, bios32_entrypoint);
+ 
+ 	if (cmn_regs.u1.ral != 0) {
+@@ -239,7 +239,8 @@ static int __devinit cru_detect(unsigned long map_entry,
+ 			cru_rom_addr =
+ 				ioremap(cru_physical_address, cru_length);
+ 			if (cru_rom_addr) {
+-				set_memory_x((unsigned long)cru_rom_addr, cru_length);
++				set_memory_x((unsigned long)cru_rom_addr & PAGE_MASK,
++					(cru_length + PAGE_SIZE - 1) >> PAGE_SHIFT);
+ 				retval = 0;
+ 			}
+ 		}
+diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
+index 1ed37ba..a64fde6 100644
+--- a/fs/binfmt_elf.c
++++ b/fs/binfmt_elf.c
+@@ -1452,7 +1452,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
+ 	for (i = 1; i < view->n; ++i) {
+ 		const struct user_regset *regset = &view->regsets[i];
+ 		do_thread_regset_writeback(t->task, regset);
+-		if (regset->core_note_type &&
++		if (regset->core_note_type && regset->get &&
+ 		    (!regset->active || regset->active(t->task, regset))) {
+ 			int ret;
+ 			size_t size = regset->n * regset->size;
+diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
+index c3d6182..7c863b5 100644
+--- a/fs/cifs/dir.c
++++ b/fs/cifs/dir.c
+@@ -691,10 +691,26 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
+ 			 * If either that or op not supported returned, follow
+ 			 * the normal lookup.
+ 			 */
+-			if ((rc == 0) || (rc == -ENOENT))
++			switch (rc) {
++			case 0:
++				/*
++				 * The server may allow us to open things like
++				 * FIFOs, but the client isn't set up to deal
++				 * with that. If it's not a regular file, just
++				 * close it and proceed as if it were a normal
++				 * lookup.
++				 */
++				if (newInode && !S_ISREG(newInode->i_mode)) {
++					CIFSSMBClose(xid, pTcon, fileHandle);
++					break;
++				}
++			case -ENOENT:
+ 				posix_open = true;
+-			else if ((rc == -EINVAL) || (rc != -EOPNOTSUPP))
++			case -EOPNOTSUPP:
++				break;
++			default:
+ 				pTcon->broken_posix_open = true;
++			}
+ 		}
+ 		if (!posix_open)
+ 			rc = cifs_get_inode_info_unix(&newInode, full_path,
+diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
+index 7a5f1ac..7e164bb 100644
+--- a/fs/ecryptfs/crypto.c
++++ b/fs/ecryptfs/crypto.c
+@@ -1455,6 +1455,25 @@ static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
+ 		ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
+ }
+ 
++void ecryptfs_i_size_init(const char *page_virt, struct inode *inode)
++{
++	struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
++	struct ecryptfs_crypt_stat *crypt_stat;
++	u64 file_size;
++
++	crypt_stat = &ecryptfs_inode_to_private(inode)->crypt_stat;
++	mount_crypt_stat =
++		&ecryptfs_superblock_to_private(inode->i_sb)->mount_crypt_stat;
++	if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
++		file_size = i_size_read(ecryptfs_inode_to_lower(inode));
++		if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
++			file_size += crypt_stat->num_header_bytes_at_front;
++	} else
++		file_size = get_unaligned_be64(page_virt);
++	i_size_write(inode, (loff_t)file_size);
++	crypt_stat->flags |= ECRYPTFS_I_SIZE_INITIALIZED;
++}
++
+ /**
+  * ecryptfs_read_headers_virt
+  * @page_virt: The virtual address into which to read the headers
+@@ -1485,6 +1504,8 @@ static int ecryptfs_read_headers_virt(char *page_virt,
+ 		rc = -EINVAL;
+ 		goto out;
+ 	}
++	if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
++		ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
+ 	offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
+ 	rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
+ 				    &bytes_read);
+diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
+index 542f625..9685315 100644
+--- a/fs/ecryptfs/ecryptfs_kernel.h
++++ b/fs/ecryptfs/ecryptfs_kernel.h
+@@ -270,6 +270,7 @@ struct ecryptfs_crypt_stat {
+ #define ECRYPTFS_ENCFN_USE_MOUNT_FNEK 0x00001000
+ #define ECRYPTFS_ENCFN_USE_FEK        0x00002000
+ #define ECRYPTFS_UNLINK_SIGS	      0x00004000
++#define ECRYPTFS_I_SIZE_INITIALIZED   0x00008000
+ 	u32 flags;
+ 	unsigned int file_version;
+ 	size_t iv_bytes;
+@@ -619,6 +620,7 @@ struct ecryptfs_open_req {
+ int ecryptfs_interpose(struct dentry *hidden_dentry,
+ 		       struct dentry *this_dentry, struct super_block *sb,
+ 		       u32 flags);
++void ecryptfs_i_size_init(const char *page_virt, struct inode *inode);
+ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ 					struct dentry *lower_dentry,
+ 					struct inode *ecryptfs_dir_inode,
+diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
+index 3015389..502b09f 100644
+--- a/fs/ecryptfs/file.c
++++ b/fs/ecryptfs/file.c
+@@ -237,7 +237,8 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
+ 				goto out_free;
+ 			}
+ 			rc = 0;
+-			crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
++			crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED
++						| ECRYPTFS_ENCRYPTED);
+ 			mutex_unlock(&crypt_stat->cs_mutex);
+ 			goto out;
+ 		}
+diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
+index 4434e8f..90a6087 100644
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -256,10 +256,8 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ 	struct dentry *lower_dir_dentry;
+ 	struct vfsmount *lower_mnt;
+ 	struct inode *lower_inode;
+-	struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
+ 	struct ecryptfs_crypt_stat *crypt_stat;
+ 	char *page_virt = NULL;
+-	u64 file_size;
+ 	int rc = 0;
+ 
+ 	lower_dir_dentry = lower_dentry->d_parent;
+@@ -334,18 +332,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
+ 		}
+ 		crypt_stat->flags |= ECRYPTFS_METADATA_IN_XATTR;
+ 	}
+-	mount_crypt_stat = &ecryptfs_superblock_to_private(
+-		ecryptfs_dentry->d_sb)->mount_crypt_stat;
+-	if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
+-		if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
+-			file_size = (crypt_stat->num_header_bytes_at_front
+-				     + i_size_read(lower_dentry->d_inode));
+-		else
+-			file_size = i_size_read(lower_dentry->d_inode);
+-	} else {
+-		file_size = get_unaligned_be64(page_virt);
+-	}
+-	i_size_write(ecryptfs_dentry->d_inode, (loff_t)file_size);
++	ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
+ out_free_kmem:
+ 	kmem_cache_free(ecryptfs_header_cache_2, page_virt);
+ 	goto out;
+@@ -964,7 +951,8 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
+ 				goto out;
+ 			}
+ 			rc = 0;
+-			crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED);
++			crypt_stat->flags &= ~(ECRYPTFS_I_SIZE_INITIALIZED
++						| ECRYPTFS_ENCRYPTED);
+ 		}
+ 	}
+ 	mutex_unlock(&crypt_stat->cs_mutex);
+diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
+index b449e73..61e43a6 100644
+--- a/include/linux/backing-dev.h
++++ b/include/linux/backing-dev.h
+@@ -105,6 +105,7 @@ void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
+ 				long nr_pages);
+ int bdi_writeback_task(struct bdi_writeback *wb);
+ int bdi_has_dirty_io(struct backing_dev_info *bdi);
++void bdi_arm_supers_timer(void);
+ 
+ extern spinlock_t bdi_lock;
+ extern struct list_head bdi_list;
+diff --git a/include/linux/regset.h b/include/linux/regset.h
+index 8abee65..686f373 100644
+--- a/include/linux/regset.h
++++ b/include/linux/regset.h
+@@ -335,8 +335,11 @@ static inline int copy_regset_to_user(struct task_struct *target,
+ {
+ 	const struct user_regset *regset = &view->regsets[setno];
+ 
++	if (!regset->get)
++		return -EOPNOTSUPP;
++
+ 	if (!access_ok(VERIFY_WRITE, data, size))
+-		return -EIO;
++		return -EFAULT;
+ 
+ 	return regset->get(target, regset, offset, size, NULL, data);
+ }
+@@ -358,8 +361,11 @@ static inline int copy_regset_from_user(struct task_struct *target,
+ {
+ 	const struct user_regset *regset = &view->regsets[setno];
+ 
++	if (!regset->set)
++		return -EOPNOTSUPP;
++
+ 	if (!access_ok(VERIFY_READ, data, size))
+-		return -EIO;
++		return -EFAULT;
+ 
+ 	return regset->set(target, regset, offset, size, NULL, data);
+ }
+diff --git a/mm/backing-dev.c b/mm/backing-dev.c
+index 67a33a5..d824401 100644
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -41,7 +41,6 @@ static struct timer_list sync_supers_timer;
+ 
+ static int bdi_sync_supers(void *);
+ static void sync_supers_timer_fn(unsigned long);
+-static void arm_supers_timer(void);
+ 
+ static void bdi_add_default_flusher_task(struct backing_dev_info *bdi);
+ 
+@@ -242,7 +241,7 @@ static int __init default_bdi_init(void)
+ 
+ 	init_timer(&sync_supers_timer);
+ 	setup_timer(&sync_supers_timer, sync_supers_timer_fn, 0);
+-	arm_supers_timer();
++	bdi_arm_supers_timer();
+ 
+ 	err = bdi_init(&default_backing_dev_info);
+ 	if (!err)
+@@ -364,10 +363,13 @@ static int bdi_sync_supers(void *unused)
+ 	return 0;
+ }
+ 
+-static void arm_supers_timer(void)
++void bdi_arm_supers_timer(void)
+ {
+ 	unsigned long next;
+ 
++	if (!dirty_writeback_interval)
++		return;
++
+ 	next = msecs_to_jiffies(dirty_writeback_interval * 10) + jiffies;
+ 	mod_timer(&sync_supers_timer, round_jiffies_up(next));
+ }
+@@ -375,7 +377,7 @@ static void arm_supers_timer(void)
+ static void sync_supers_timer_fn(unsigned long unused)
+ {
+ 	wake_up_process(sync_supers_tsk);
+-	arm_supers_timer();
++	bdi_arm_supers_timer();
+ }
+ 
+ static int bdi_forker_task(void *ptr)
+@@ -418,7 +420,10 @@ static int bdi_forker_task(void *ptr)
+ 
+ 			spin_unlock_bh(&bdi_lock);
+ 			wait = msecs_to_jiffies(dirty_writeback_interval * 10);
+-			schedule_timeout(wait);
++			if (wait)
++				schedule_timeout(wait);
++			else
++				schedule();
+ 			try_to_freeze();
+ 			continue;
+ 		}
+diff --git a/mm/page-writeback.c b/mm/page-writeback.c
+index 2c5d792..52f71ae 100644
+--- a/mm/page-writeback.c
++++ b/mm/page-writeback.c
+@@ -694,6 +694,7 @@ int dirty_writeback_centisecs_handler(ctl_table *table, int write,
+ 	void __user *buffer, size_t *length, loff_t *ppos)
+ {
+ 	proc_dointvec(table, write, buffer, length, ppos);
++	bdi_arm_supers_timer();
+ 	return 0;
+ }
+ 

Added: dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/debian/revert-IA64-Remove-COMPAT_IA32-support.patch	Sun Mar 18 22:42:15 2012	(r18853)
@@ -0,0 +1,42 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 18 Mar 2012 22:30:53 +0000
+Subject: [PATCH] Revert "IA64: Remove COMPAT_IA32 support"
+
+This reverts commit d9a25c03a1defab08703a7cc186a68aa2610ad4f.
+Even though this code is pointless, we can't disable it now as it will
+change the ABI for many functions.
+---
+ arch/ia64/Kconfig |   17 +++++++++++++++++
+ 1 files changed, 17 insertions(+), 0 deletions(-)
+
+diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
+index 20fc9c5..1ee596c 100644
+--- a/arch/ia64/Kconfig
++++ b/arch/ia64/Kconfig
+@@ -502,6 +502,23 @@ config ARCH_PROC_KCORE_TEXT
+ 	def_bool y
+ 	depends on PROC_KCORE
+ 
++config IA32_SUPPORT
++	bool "Support for Linux/x86 binaries"
++	help
++	  IA-64 processors can execute IA-32 (X86) instructions.  By
++	  saying Y here, the kernel will include IA-32 system call
++	  emulation support which makes it possible to transparently
++	  run IA-32 Linux binaries on an IA-64 Linux system.
++	  If in doubt, say Y.
++
++config COMPAT
++	bool
++	depends on IA32_SUPPORT
++	default y
++
++config COMPAT_FOR_U64_ALIGNMENT
++	def_bool COMPAT
++
+ config IA64_MCA_RECOVERY
+ 	tristate "MCA recovery from errors other than TLB."
+ 
+-- 
+1.7.9.1
+

Modified: dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch	Sun Mar 18 03:56:27 2012	(r18852)
+++ dists/squeeze/linux-2.6/debian/patches/features/all/xen/pvops.patch	Sun Mar 18 22:42:15 2012	(r18853)
@@ -16,6 +16,8 @@
 $ git diff debian-base..debian-pvops
 
 [bwh: Updated context in xen_smp_prepare_cpus() to apply after 2.6.32.47.]
+[bwh: Updated the removed implementation of blkfront_closing() to match
+ 2.6.32.59.  The fix made there appears to be unnecessary here.]
 
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
 index 9238f05..eb729e4 100644
@@ -6837,11 +6839,11 @@
 -	/* Flush gnttab callback work. Must be done with no locks held. */
 -	flush_scheduled_work();
 -
+-	del_gendisk(info->gd);
+-
 -	blk_cleanup_queue(info->rq);
 -	info->rq = NULL;
 -
--	del_gendisk(info->gd);
--
 - out:
 -	xenbus_frontend_closed(dev);
 -}

Modified: dists/squeeze/linux-2.6/debian/patches/series/42
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/42	Sun Mar 18 03:56:27 2012	(r18852)
+++ dists/squeeze/linux-2.6/debian/patches/series/42	Sun Mar 18 22:42:15 2012	(r18853)
@@ -11,3 +11,5 @@
 + bugfix/all/stable/2.6.32.58.patch
 + debian/ia64-Define-is_compat_task.patch
 + bugfix/all/e1000e-workaround-for-packet-drop-on-82579-at-100Mbp.patch
++ bugfix/all/stable/2.6.32.59.patch
++ debian/revert-IA64-Remove-COMPAT_IA32-support.patch



More information about the Kernel-svn-changes mailing list