瀏覽代碼

Merge branch 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6

* 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
  PM / Hibernate: Replace bdget call with simple atomic_inc of i_count
  PM / ACPI: HP G7000 Notebook needs a SCI_EN resume quirk
Linus Torvalds 15 年之前
父節點
當前提交
91a5698d1f
共有 4 個文件被更改,包括 21 次插入2 次删除
  1. 8 0
      drivers/acpi/sleep.c
  2. 10 0
      fs/block_dev.c
  3. 1 0
      include/linux/fs.h
  4. 2 2
      mm/swapfile.c

+ 8 - 0
drivers/acpi/sleep.c

@@ -397,6 +397,14 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
 		},
 		},
 	},
 	},
 	{
 	{
+	.callback = init_set_sci_en_on_resume,
+	.ident = "Hewlett-Packard HP G7000 Notebook PC",
+	.matches = {
+		DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
+		DMI_MATCH(DMI_PRODUCT_NAME, "HP G7000 Notebook PC"),
+		},
+	},
+	{
 	.callback = init_old_suspend_ordering,
 	.callback = init_old_suspend_ordering,
 	.ident = "Panasonic CF51-2L",
 	.ident = "Panasonic CF51-2L",
 	.matches = {
 	.matches = {

+ 10 - 0
fs/block_dev.c

@@ -564,6 +564,16 @@ struct block_device *bdget(dev_t dev)
 
 
 EXPORT_SYMBOL(bdget);
 EXPORT_SYMBOL(bdget);
 
 
+/**
+ * bdgrab -- Grab a reference to an already referenced block device
+ * @bdev:	Block device to grab a reference to.
+ */
+struct block_device *bdgrab(struct block_device *bdev)
+{
+	atomic_inc(&bdev->bd_inode->i_count);
+	return bdev;
+}
+
 long nr_blockdev_pages(void)
 long nr_blockdev_pages(void)
 {
 {
 	struct block_device *bdev;
 	struct block_device *bdev;

+ 1 - 0
include/linux/fs.h

@@ -1946,6 +1946,7 @@ extern void putname(const char *name);
 extern int register_blkdev(unsigned int, const char *);
 extern int register_blkdev(unsigned int, const char *);
 extern void unregister_blkdev(unsigned int, const char *);
 extern void unregister_blkdev(unsigned int, const char *);
 extern struct block_device *bdget(dev_t);
 extern struct block_device *bdget(dev_t);
+extern struct block_device *bdgrab(struct block_device *bdev);
 extern void bd_set_size(struct block_device *, loff_t size);
 extern void bd_set_size(struct block_device *, loff_t size);
 extern void bd_forget(struct inode *inode);
 extern void bd_forget(struct inode *inode);
 extern void bdput(struct block_device *);
 extern void bdput(struct block_device *);

+ 2 - 2
mm/swapfile.c

@@ -753,7 +753,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p)
 
 
 		if (!bdev) {
 		if (!bdev) {
 			if (bdev_p)
 			if (bdev_p)
-				*bdev_p = bdget(sis->bdev->bd_dev);
+				*bdev_p = bdgrab(sis->bdev);
 
 
 			spin_unlock(&swap_lock);
 			spin_unlock(&swap_lock);
 			return i;
 			return i;
@@ -765,7 +765,7 @@ int swap_type_of(dev_t device, sector_t offset, struct block_device **bdev_p)
 					struct swap_extent, list);
 					struct swap_extent, list);
 			if (se->start_block == offset) {
 			if (se->start_block == offset) {
 				if (bdev_p)
 				if (bdev_p)
-					*bdev_p = bdget(sis->bdev->bd_dev);
+					*bdev_p = bdgrab(sis->bdev);
 
 
 				spin_unlock(&swap_lock);
 				spin_unlock(&swap_lock);
 				bdput(bdev);
 				bdput(bdev);