diff options
| -rw-r--r-- | .mailmap | 2 | ||||
| -rw-r--r-- | MAINTAINERS | 39 | ||||
| -rw-r--r-- | drivers/acpi/thermal.c | 3 | ||||
| -rw-r--r-- | drivers/block/paride/pcd.c | 2 | ||||
| -rw-r--r-- | drivers/block/paride/pf.c | 2 | ||||
| -rw-r--r-- | drivers/char/mxser.c | 48 | ||||
| -rw-r--r-- | drivers/char/mxser_new.c | 45 | ||||
| -rw-r--r-- | drivers/hwmon/w83627ehf.c | 14 | ||||
| -rw-r--r-- | drivers/serial/8250.c | 8 | ||||
| -rw-r--r-- | drivers/serial/icom.c | 9 | ||||
| -rw-r--r-- | drivers/serial/icom.h | 1 | ||||
| -rw-r--r-- | drivers/video/Kconfig | 2 | ||||
| -rw-r--r-- | fs/9p/vfs_inode.c | 2 | ||||
| -rw-r--r-- | fs/reiserfs/xattr.c | 92 | ||||
| -rw-r--r-- | include/linux/taskstats.h | 13 | ||||
| -rw-r--r-- | kernel/sysctl.c | 2 | ||||
| -rw-r--r-- | mm/migrate.c | 15 | ||||
| -rw-r--r-- | mm/oom_kill.c | 4 |
18 files changed, 119 insertions, 184 deletions
| @@ -67,6 +67,8 @@ Koushik <raghavendra.koushik@neterion.com> | |||
| 67 | Leonid I Ananiev <leonid.i.ananiev@intel.com> | 67 | Leonid I Ananiev <leonid.i.ananiev@intel.com> |
| 68 | Linas Vepstas <linas@austin.ibm.com> | 68 | Linas Vepstas <linas@austin.ibm.com> |
| 69 | Matthieu CASTET <castet.matthieu@free.fr> | 69 | Matthieu CASTET <castet.matthieu@free.fr> |
| 70 | Michael Buesch <mb@bu3sch.de> | ||
| 71 | Michael Buesch <mbuesch@freenet.de> | ||
| 70 | Michel Dänzer <michel@tungstengraphics.com> | 72 | Michel Dänzer <michel@tungstengraphics.com> |
| 71 | Mitesh shah <mshah@teja.com> | 73 | Mitesh shah <mshah@teja.com> |
| 72 | Morten Welinder <terra@gnome.org> | 74 | Morten Welinder <terra@gnome.org> |
diff --git a/MAINTAINERS b/MAINTAINERS index ef84419ade3a..277877a34ef6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1318,7 +1318,7 @@ S: Maintained | |||
| 1318 | ETHERNET BRIDGE | 1318 | ETHERNET BRIDGE |
| 1319 | P: Stephen Hemminger | 1319 | P: Stephen Hemminger |
| 1320 | M: shemminger@linux-foundation.org | 1320 | M: shemminger@linux-foundation.org |
| 1321 | L: bridge@lists.osdl.org | 1321 | L: bridge@lists.linux-foundation.org |
| 1322 | W: http://bridge.sourceforge.net/ | 1322 | W: http://bridge.sourceforge.net/ |
| 1323 | S: Maintained | 1323 | S: Maintained |
| 1324 | 1324 | ||
| @@ -1355,6 +1355,11 @@ M: kevin.curtis@farsite.co.uk | |||
| 1355 | W: http://www.farsite.co.uk/ | 1355 | W: http://www.farsite.co.uk/ |
| 1356 | S: Supported | 1356 | S: Supported |
| 1357 | 1357 | ||
| 1358 | FAULT INJECTION SUPPORT | ||
| 1359 | P: Akinobu Mita | ||
| 1360 | M: akinobu.mita@gmail.com | ||
| 1361 | S: Supported | ||
| 1362 | |||
| 1358 | FRAMEBUFFER LAYER | 1363 | FRAMEBUFFER LAYER |
| 1359 | P: Antonino Daplas | 1364 | P: Antonino Daplas |
| 1360 | M: adaplas@gmail.com | 1365 | M: adaplas@gmail.com |
| @@ -1690,7 +1695,7 @@ S: Maintained | |||
| 1690 | 1695 | ||
| 1691 | IEEE 1394 SUBSYSTEM | 1696 | IEEE 1394 SUBSYSTEM |
| 1692 | P: Ben Collins | 1697 | P: Ben Collins |
| 1693 | M: bcollins@debian.org | 1698 | M: ben.collins@ubuntu.com |
| 1694 | P: Stefan Richter | 1699 | P: Stefan Richter |
| 1695 | M: stefanr@s5r6.in-berlin.de | 1700 | M: stefanr@s5r6.in-berlin.de |
| 1696 | L: linux1394-devel@lists.sourceforge.net | 1701 | L: linux1394-devel@lists.sourceforge.net |
| @@ -1698,25 +1703,11 @@ W: http://www.linux1394.org/ | |||
| 1698 | T: git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git | 1703 | T: git kernel.org:/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git |
| 1699 | S: Maintained | 1704 | S: Maintained |
| 1700 | 1705 | ||
| 1701 | IEEE 1394 IPV4 DRIVER (eth1394) | 1706 | IEEE 1394 RAW I/O DRIVER (raw1394) |
| 1702 | P: Stefan Richter | ||
| 1703 | M: stefanr@s5r6.in-berlin.de | ||
| 1704 | L: linux1394-devel@lists.sourceforge.net | ||
| 1705 | S: Odd Fixes | ||
| 1706 | |||
| 1707 | IEEE 1394 PCILYNX DRIVER | ||
| 1708 | P: Jody McIntyre | ||
| 1709 | M: scjody@modernduck.com | ||
| 1710 | P: Stefan Richter | ||
| 1711 | M: stefanr@s5r6.in-berlin.de | ||
| 1712 | L: linux1394-devel@lists.sourceforge.net | ||
| 1713 | S: Odd Fixes | ||
| 1714 | |||
| 1715 | IEEE 1394 RAW I/O DRIVER | ||
| 1716 | P: Ben Collins | ||
| 1717 | M: bcollins@debian.org | ||
| 1718 | P: Dan Dennedy | 1707 | P: Dan Dennedy |
| 1719 | M: dan@dennedy.org | 1708 | M: dan@dennedy.org |
| 1709 | P: Stefan Richter | ||
| 1710 | M: stefanr@s5r6.in-berlin.de | ||
| 1720 | L: linux1394-devel@lists.sourceforge.net | 1711 | L: linux1394-devel@lists.sourceforge.net |
| 1721 | S: Maintained | 1712 | S: Maintained |
| 1722 | 1713 | ||
| @@ -1951,7 +1942,7 @@ P: Vivek Goyal | |||
| 1951 | M: vgoyal@in.ibm.com | 1942 | M: vgoyal@in.ibm.com |
| 1952 | P: Haren Myneni | 1943 | P: Haren Myneni |
| 1953 | M: hbabu@us.ibm.com | 1944 | M: hbabu@us.ibm.com |
| 1954 | L: fastboot@lists.osdl.org | 1945 | L: fastboot@lists.linux-foundation.org |
| 1955 | L: linux-kernel@vger.kernel.org | 1946 | L: linux-kernel@vger.kernel.org |
| 1956 | W: http://lse.sourceforge.net/kdump/ | 1947 | W: http://lse.sourceforge.net/kdump/ |
| 1957 | S: Maintained | 1948 | S: Maintained |
| @@ -1978,7 +1969,7 @@ S: Maintained | |||
| 1978 | 1969 | ||
| 1979 | KERNEL JANITORS | 1970 | KERNEL JANITORS |
| 1980 | P: Several | 1971 | P: Several |
| 1981 | L: kernel-janitors@lists.osdl.org | 1972 | L: kernel-janitors@lists.linux-foundation.org |
| 1982 | W: http://www.kerneljanitors.org/ | 1973 | W: http://www.kerneljanitors.org/ |
| 1983 | S: Maintained | 1974 | S: Maintained |
| 1984 | 1975 | ||
| @@ -2001,7 +1992,7 @@ P: Eric Biederman | |||
| 2001 | M: ebiederm@xmission.com | 1992 | M: ebiederm@xmission.com |
| 2002 | W: http://www.xmission.com/~ebiederm/files/kexec/ | 1993 | W: http://www.xmission.com/~ebiederm/files/kexec/ |
| 2003 | L: linux-kernel@vger.kernel.org | 1994 | L: linux-kernel@vger.kernel.org |
| 2004 | L: fastboot@lists.osdl.org | 1995 | L: fastboot@lists.linux-foundation.org |
| 2005 | S: Maintained | 1996 | S: Maintained |
| 2006 | 1997 | ||
| 2007 | KPROBES | 1998 | KPROBES |
| @@ -2339,7 +2330,7 @@ S: Maintained | |||
| 2339 | NETEM NETWORK EMULATOR | 2330 | NETEM NETWORK EMULATOR |
| 2340 | P: Stephen Hemminger | 2331 | P: Stephen Hemminger |
| 2341 | M: shemminger@linux-foundation.org | 2332 | M: shemminger@linux-foundation.org |
| 2342 | L: netem@lists.osdl.org | 2333 | L: netem@lists.linux-foundation.org |
| 2343 | S: Maintained | 2334 | S: Maintained |
| 2344 | 2335 | ||
| 2345 | NETFILTER/IPTABLES/IPCHAINS | 2336 | NETFILTER/IPTABLES/IPCHAINS |
| @@ -3068,7 +3059,7 @@ S: Supported | |||
| 3068 | SOFTWARE SUSPEND: | 3059 | SOFTWARE SUSPEND: |
| 3069 | P: Pavel Machek | 3060 | P: Pavel Machek |
| 3070 | M: pavel@suse.cz | 3061 | M: pavel@suse.cz |
| 3071 | L: linux-pm@lists.osdl.org | 3062 | L: linux-pm@lists.linux-foundation.org |
| 3072 | S: Maintained | 3063 | S: Maintained |
| 3073 | 3064 | ||
| 3074 | SONIC NETWORK DRIVER | 3065 | SONIC NETWORK DRIVER |
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c index 0ae8b9310cbf..589b98b7b216 100644 --- a/drivers/acpi/thermal.c +++ b/drivers/acpi/thermal.c | |||
| @@ -758,7 +758,8 @@ static void acpi_thermal_check(void *data) | |||
| 758 | del_timer(&(tz->timer)); | 758 | del_timer(&(tz->timer)); |
| 759 | } else { | 759 | } else { |
| 760 | if (timer_pending(&(tz->timer))) | 760 | if (timer_pending(&(tz->timer))) |
| 761 | mod_timer(&(tz->timer), (HZ * sleep_time) / 1000); | 761 | mod_timer(&(tz->timer), |
| 762 | jiffies + (HZ * sleep_time) / 1000); | ||
| 762 | else { | 763 | else { |
| 763 | tz->timer.data = (unsigned long)tz; | 764 | tz->timer.data = (unsigned long)tz; |
| 764 | tz->timer.function = acpi_thermal_run; | 765 | tz->timer.function = acpi_thermal_run; |
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index c852eed91e4b..1eeb8f2cde71 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c | |||
| @@ -140,7 +140,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_DLY}; | |||
| 140 | #include <linux/blkdev.h> | 140 | #include <linux/blkdev.h> |
| 141 | #include <asm/uaccess.h> | 141 | #include <asm/uaccess.h> |
| 142 | 142 | ||
| 143 | static spinlock_t pcd_lock; | 143 | static DEFINE_SPINLOCK(pcd_lock); |
| 144 | 144 | ||
| 145 | module_param(verbose, bool, 0644); | 145 | module_param(verbose, bool, 0644); |
| 146 | module_param(major, int, 0); | 146 | module_param(major, int, 0); |
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c index 7cdaa1951260..5826508f6731 100644 --- a/drivers/block/paride/pf.c +++ b/drivers/block/paride/pf.c | |||
| @@ -154,7 +154,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_LUN, D_DLY}; | |||
| 154 | #include <linux/blkpg.h> | 154 | #include <linux/blkpg.h> |
| 155 | #include <asm/uaccess.h> | 155 | #include <asm/uaccess.h> |
| 156 | 156 | ||
| 157 | static spinlock_t pf_spin_lock; | 157 | static DEFINE_SPINLOCK(pf_spin_lock); |
| 158 | 158 | ||
| 159 | module_param(verbose, bool, 0644); | 159 | module_param(verbose, bool, 0644); |
| 160 | module_param(major, int, 0); | 160 | module_param(major, int, 0); |
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index a61fb6da5d03..80a01150b86c 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c | |||
| @@ -1338,43 +1338,23 @@ static int mxser_ioctl(struct tty_struct *tty, struct file *file, unsigned int c | |||
| 1338 | * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) | 1338 | * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) |
| 1339 | * Caller should use TIOCGICOUNT to see which one it was | 1339 | * Caller should use TIOCGICOUNT to see which one it was |
| 1340 | */ | 1340 | */ |
| 1341 | case TIOCMIWAIT: { | 1341 | case TIOCMIWAIT: |
| 1342 | DECLARE_WAITQUEUE(wait, current); | 1342 | spin_lock_irqsave(&info->slock, flags); |
| 1343 | int ret; | 1343 | cnow = info->icount; /* note the counters on entry */ |
| 1344 | spin_unlock_irqrestore(&info->slock, flags); | ||
| 1345 | |||
| 1346 | wait_event_interruptible(info->delta_msr_wait, ({ | ||
| 1347 | cprev = cnow; | ||
| 1344 | spin_lock_irqsave(&info->slock, flags); | 1348 | spin_lock_irqsave(&info->slock, flags); |
| 1345 | cprev = info->icount; /* note the counters on entry */ | 1349 | cnow = info->icount; /* atomic copy */ |
| 1346 | spin_unlock_irqrestore(&info->slock, flags); | 1350 | spin_unlock_irqrestore(&info->slock, flags); |
| 1347 | 1351 | ||
| 1348 | add_wait_queue(&info->delta_msr_wait, &wait); | 1352 | ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || |
| 1349 | while (1) { | 1353 | ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || |
| 1350 | spin_lock_irqsave(&info->slock, flags); | 1354 | ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || |
| 1351 | cnow = info->icount; /* atomic copy */ | 1355 | ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)); |
| 1352 | spin_unlock_irqrestore(&info->slock, flags); | 1356 | })); |
| 1353 | 1357 | break; | |
| 1354 | set_current_state(TASK_INTERRUPTIBLE); | ||
| 1355 | if (((arg & TIOCM_RNG) && | ||
| 1356 | (cnow.rng != cprev.rng)) || | ||
| 1357 | ((arg & TIOCM_DSR) && | ||
| 1358 | (cnow.dsr != cprev.dsr)) || | ||
| 1359 | ((arg & TIOCM_CD) && | ||
| 1360 | (cnow.dcd != cprev.dcd)) || | ||
| 1361 | ((arg & TIOCM_CTS) && | ||
| 1362 | (cnow.cts != cprev.cts))) { | ||
| 1363 | ret = 0; | ||
| 1364 | break; | ||
| 1365 | } | ||
| 1366 | /* see if a signal did it */ | ||
| 1367 | if (signal_pending(current)) { | ||
| 1368 | ret = -ERESTARTSYS; | ||
| 1369 | break; | ||
| 1370 | } | ||
| 1371 | cprev = cnow; | ||
| 1372 | } | ||
| 1373 | current->state = TASK_RUNNING; | ||
| 1374 | remove_wait_queue(&info->delta_msr_wait, &wait); | ||
| 1375 | break; | ||
| 1376 | } | ||
| 1377 | /* NOTREACHED */ | ||
| 1378 | /* | 1358 | /* |
| 1379 | * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) | 1359 | * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) |
| 1380 | * Return: write counters to the user passed counter struct | 1360 | * Return: write counters to the user passed counter struct |
diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c index 9af07e4999d5..f7603b6aeb87 100644 --- a/drivers/char/mxser_new.c +++ b/drivers/char/mxser_new.c | |||
| @@ -1758,43 +1758,23 @@ static int mxser_ioctl(struct tty_struct *tty, struct file *file, | |||
| 1758 | * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) | 1758 | * (use |'ed TIOCM_RNG/DSR/CD/CTS for masking) |
| 1759 | * Caller should use TIOCGICOUNT to see which one it was | 1759 | * Caller should use TIOCGICOUNT to see which one it was |
| 1760 | */ | 1760 | */ |
| 1761 | case TIOCMIWAIT: { | 1761 | case TIOCMIWAIT: |
| 1762 | DECLARE_WAITQUEUE(wait, current); | ||
| 1763 | int ret; | ||
| 1764 | spin_lock_irqsave(&info->slock, flags); | 1762 | spin_lock_irqsave(&info->slock, flags); |
| 1765 | cprev = info->icount; /* note the counters on entry */ | 1763 | cnow = info->icount; /* note the counters on entry */ |
| 1766 | spin_unlock_irqrestore(&info->slock, flags); | 1764 | spin_unlock_irqrestore(&info->slock, flags); |
| 1767 | 1765 | ||
| 1768 | add_wait_queue(&info->delta_msr_wait, &wait); | 1766 | wait_event_interruptible(info->delta_msr_wait, ({ |
| 1769 | while (1) { | 1767 | cprev = cnow; |
| 1770 | spin_lock_irqsave(&info->slock, flags); | 1768 | spin_lock_irqsave(&info->slock, flags); |
| 1771 | cnow = info->icount; /* atomic copy */ | 1769 | cnow = info->icount; /* atomic copy */ |
| 1772 | spin_unlock_irqrestore(&info->slock, flags); | 1770 | spin_unlock_irqrestore(&info->slock, flags); |
| 1773 | 1771 | ||
| 1774 | set_current_state(TASK_INTERRUPTIBLE); | 1772 | ((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || |
| 1775 | if (((arg & TIOCM_RNG) && | 1773 | ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || |
| 1776 | (cnow.rng != cprev.rng)) || | 1774 | ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || |
| 1777 | ((arg & TIOCM_DSR) && | 1775 | ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts)); |
| 1778 | (cnow.dsr != cprev.dsr)) || | 1776 | })); |
| 1779 | ((arg & TIOCM_CD) && | ||
| 1780 | (cnow.dcd != cprev.dcd)) || | ||
| 1781 | ((arg & TIOCM_CTS) && | ||
| 1782 | (cnow.cts != cprev.cts))) { | ||
| 1783 | ret = 0; | ||
| 1784 | break; | ||
| 1785 | } | ||
| 1786 | /* see if a signal did it */ | ||
| 1787 | if (signal_pending(current)) { | ||
| 1788 | ret = -ERESTARTSYS; | ||
| 1789 | break; | ||
| 1790 | } | ||
| 1791 | cprev = cnow; | ||
| 1792 | } | ||
| 1793 | current->state = TASK_RUNNING; | ||
| 1794 | remove_wait_queue(&info->delta_msr_wait, &wait); | ||
| 1795 | break; | 1777 | break; |
| 1796 | } | ||
| 1797 | /* NOTREACHED */ | ||
| 1798 | /* | 1778 | /* |
| 1799 | * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) | 1779 | * Get counter of input serial line interrupts (DCD,RI,DSR,CTS) |
| 1800 | * Return: write counters to the user passed counter struct | 1780 | * Return: write counters to the user passed counter struct |
| @@ -2230,7 +2210,14 @@ end_intr: | |||
| 2230 | port->mon_data.rxcnt += cnt; | 2210 | port->mon_data.rxcnt += cnt; |
| 2231 | port->mon_data.up_rxcnt += cnt; | 2211 | port->mon_data.up_rxcnt += cnt; |
| 2232 | 2212 | ||
| 2213 | /* | ||
| 2214 | * We are called from an interrupt context with &port->slock | ||
| 2215 | * being held. Drop it temporarily in order to prevent | ||
| 2216 | * recursive locking. | ||
| 2217 | */ | ||
| 2218 | spin_unlock(&port->slock); | ||
| 2233 | tty_flip_buffer_push(tty); | 2219 | tty_flip_buffer_push(tty); |
| 2220 | spin_lock(&port->slock); | ||
| 2234 | } | 2221 | } |
| 2235 | 2222 | ||
| 2236 | static void mxser_transmit_chars(struct mxser_port *port) | 2223 | static void mxser_transmit_chars(struct mxser_port *port) |
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c index 01206ebb1cf2..30a76404f0af 100644 --- a/drivers/hwmon/w83627ehf.c +++ b/drivers/hwmon/w83627ehf.c | |||
| @@ -121,9 +121,9 @@ superio_exit(void) | |||
| 121 | * ISA constants | 121 | * ISA constants |
| 122 | */ | 122 | */ |
| 123 | 123 | ||
| 124 | #define REGION_ALIGNMENT ~7 | 124 | #define IOREGION_ALIGNMENT ~7 |
| 125 | #define REGION_OFFSET 5 | 125 | #define IOREGION_OFFSET 5 |
| 126 | #define REGION_LENGTH 2 | 126 | #define IOREGION_LENGTH 2 |
| 127 | #define ADDR_REG_OFFSET 5 | 127 | #define ADDR_REG_OFFSET 5 |
| 128 | #define DATA_REG_OFFSET 6 | 128 | #define DATA_REG_OFFSET 6 |
| 129 | 129 | ||
| @@ -1194,7 +1194,7 @@ static int w83627ehf_detect(struct i2c_adapter *adapter) | |||
| 1194 | u8 fan4pin, fan5pin; | 1194 | u8 fan4pin, fan5pin; |
| 1195 | int i, err = 0; | 1195 | int i, err = 0; |
| 1196 | 1196 | ||
| 1197 | if (!request_region(address + REGION_OFFSET, REGION_LENGTH, | 1197 | if (!request_region(address + IOREGION_OFFSET, IOREGION_LENGTH, |
| 1198 | w83627ehf_driver.driver.name)) { | 1198 | w83627ehf_driver.driver.name)) { |
| 1199 | err = -EBUSY; | 1199 | err = -EBUSY; |
| 1200 | goto exit; | 1200 | goto exit; |
| @@ -1322,7 +1322,7 @@ exit_remove: | |||
| 1322 | exit_free: | 1322 | exit_free: |
| 1323 | kfree(data); | 1323 | kfree(data); |
| 1324 | exit_release: | 1324 | exit_release: |
| 1325 | release_region(address + REGION_OFFSET, REGION_LENGTH); | 1325 | release_region(address + IOREGION_OFFSET, IOREGION_LENGTH); |
| 1326 | exit: | 1326 | exit: |
| 1327 | return err; | 1327 | return err; |
| 1328 | } | 1328 | } |
| @@ -1337,7 +1337,7 @@ static int w83627ehf_detach_client(struct i2c_client *client) | |||
| 1337 | 1337 | ||
| 1338 | if ((err = i2c_detach_client(client))) | 1338 | if ((err = i2c_detach_client(client))) |
| 1339 | return err; | 1339 | return err; |
| 1340 | release_region(client->addr + REGION_OFFSET, REGION_LENGTH); | 1340 | release_region(client->addr + IOREGION_OFFSET, IOREGION_LENGTH); |
| 1341 | kfree(data); | 1341 | kfree(data); |
| 1342 | 1342 | ||
| 1343 | return 0; | 1343 | return 0; |
| @@ -1380,7 +1380,7 @@ static int __init w83627ehf_find(int sioaddr, unsigned short *addr) | |||
| 1380 | superio_select(W83627EHF_LD_HWM); | 1380 | superio_select(W83627EHF_LD_HWM); |
| 1381 | val = (superio_inb(SIO_REG_ADDR) << 8) | 1381 | val = (superio_inb(SIO_REG_ADDR) << 8) |
| 1382 | | superio_inb(SIO_REG_ADDR + 1); | 1382 | | superio_inb(SIO_REG_ADDR + 1); |
| 1383 | *addr = val & REGION_ALIGNMENT; | 1383 | *addr = val & IOREGION_ALIGNMENT; |
| 1384 | if (*addr == 0) { | 1384 | if (*addr == 0) { |
| 1385 | superio_exit(); | 1385 | superio_exit(); |
| 1386 | return -ENODEV; | 1386 | return -ENODEV; |
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index c129a0e8e807..90621c3312bc 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -1310,7 +1310,8 @@ static unsigned int check_modem_status(struct uart_8250_port *up) | |||
| 1310 | { | 1310 | { |
| 1311 | unsigned int status = serial_in(up, UART_MSR); | 1311 | unsigned int status = serial_in(up, UART_MSR); |
| 1312 | 1312 | ||
| 1313 | if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI) { | 1313 | if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI && |
| 1314 | up->port.info != NULL) { | ||
| 1314 | if (status & UART_MSR_TERI) | 1315 | if (status & UART_MSR_TERI) |
| 1315 | up->port.icount.rng++; | 1316 | up->port.icount.rng++; |
| 1316 | if (status & UART_MSR_DDSR) | 1317 | if (status & UART_MSR_DDSR) |
| @@ -1333,8 +1334,9 @@ static inline void | |||
| 1333 | serial8250_handle_port(struct uart_8250_port *up) | 1334 | serial8250_handle_port(struct uart_8250_port *up) |
| 1334 | { | 1335 | { |
| 1335 | unsigned int status; | 1336 | unsigned int status; |
| 1337 | unsigned long flags; | ||
| 1336 | 1338 | ||
| 1337 | spin_lock(&up->port.lock); | 1339 | spin_lock_irqsave(&up->port.lock, flags); |
| 1338 | 1340 | ||
| 1339 | status = serial_inp(up, UART_LSR); | 1341 | status = serial_inp(up, UART_LSR); |
| 1340 | 1342 | ||
| @@ -1346,7 +1348,7 @@ serial8250_handle_port(struct uart_8250_port *up) | |||
| 1346 | if (status & UART_LSR_THRE) | 1348 | if (status & UART_LSR_THRE) |
| 1347 | transmit_chars(up); | 1349 | transmit_chars(up); |
| 1348 | 1350 | ||
| 1349 | spin_unlock(&up->port.lock); | 1351 | spin_unlock_irqrestore(&up->port.lock, flags); |
| 1350 | } | 1352 | } |
| 1351 | 1353 | ||
| 1352 | /* | 1354 | /* |
diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c index 41431d0d5512..246c5572667b 100644 --- a/drivers/serial/icom.c +++ b/drivers/serial/icom.c | |||
| @@ -164,7 +164,7 @@ static void free_port_memory(struct icom_port *icom_port) | |||
| 164 | } | 164 | } |
| 165 | } | 165 | } |
| 166 | 166 | ||
| 167 | static int __init get_port_memory(struct icom_port *icom_port) | 167 | static int __devinit get_port_memory(struct icom_port *icom_port) |
| 168 | { | 168 | { |
| 169 | int index; | 169 | int index; |
| 170 | unsigned long stgAddr; | 170 | unsigned long stgAddr; |
| @@ -1380,7 +1380,7 @@ static void icom_port_active(struct icom_port *icom_port, struct icom_adapter *i | |||
| 1380 | 0x8024 + 2 - 2 * (icom_port->port - 2); | 1380 | 0x8024 + 2 - 2 * (icom_port->port - 2); |
| 1381 | } | 1381 | } |
| 1382 | } | 1382 | } |
| 1383 | static int __init icom_load_ports(struct icom_adapter *icom_adapter) | 1383 | static int __devinit icom_load_ports(struct icom_adapter *icom_adapter) |
| 1384 | { | 1384 | { |
| 1385 | struct icom_port *icom_port; | 1385 | struct icom_port *icom_port; |
| 1386 | int port_num; | 1386 | int port_num; |
| @@ -1473,7 +1473,7 @@ static void icom_remove_adapter(struct icom_adapter *icom_adapter) | |||
| 1473 | } | 1473 | } |
| 1474 | } | 1474 | } |
| 1475 | 1475 | ||
| 1476 | free_irq(icom_adapter->irq_number, (void *) icom_adapter); | 1476 | free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter); |
| 1477 | iounmap(icom_adapter->base_addr); | 1477 | iounmap(icom_adapter->base_addr); |
| 1478 | icom_free_adapter(icom_adapter); | 1478 | icom_free_adapter(icom_adapter); |
| 1479 | pci_release_regions(icom_adapter->pci_dev); | 1479 | pci_release_regions(icom_adapter->pci_dev); |
| @@ -1539,7 +1539,6 @@ static int __devinit icom_probe(struct pci_dev *dev, | |||
| 1539 | } | 1539 | } |
| 1540 | 1540 | ||
| 1541 | icom_adapter->base_addr_pci = pci_resource_start(dev, 0); | 1541 | icom_adapter->base_addr_pci = pci_resource_start(dev, 0); |
| 1542 | icom_adapter->irq_number = dev->irq; | ||
| 1543 | icom_adapter->pci_dev = dev; | 1542 | icom_adapter->pci_dev = dev; |
| 1544 | icom_adapter->version = ent->driver_data; | 1543 | icom_adapter->version = ent->driver_data; |
| 1545 | icom_adapter->subsystem_id = ent->subdevice; | 1544 | icom_adapter->subsystem_id = ent->subdevice; |
| @@ -1570,7 +1569,7 @@ static int __devinit icom_probe(struct pci_dev *dev, | |||
| 1570 | icom_port = &icom_adapter->port_info[index]; | 1569 | icom_port = &icom_adapter->port_info[index]; |
| 1571 | 1570 | ||
| 1572 | if (icom_port->status == ICOM_PORT_ACTIVE) { | 1571 | if (icom_port->status == ICOM_PORT_ACTIVE) { |
| 1573 | icom_port->uart_port.irq = icom_port->adapter->irq_number; | 1572 | icom_port->uart_port.irq = icom_port->adapter->pci_dev->irq; |
| 1574 | icom_port->uart_port.type = PORT_ICOM; | 1573 | icom_port->uart_port.type = PORT_ICOM; |
| 1575 | icom_port->uart_port.iotype = UPIO_MEM; | 1574 | icom_port->uart_port.iotype = UPIO_MEM; |
| 1576 | icom_port->uart_port.membase = | 1575 | icom_port->uart_port.membase = |
diff --git a/drivers/serial/icom.h b/drivers/serial/icom.h index 798f1ef23712..e8578d8cd35e 100644 --- a/drivers/serial/icom.h +++ b/drivers/serial/icom.h | |||
| @@ -258,7 +258,6 @@ struct icom_port { | |||
| 258 | struct icom_adapter { | 258 | struct icom_adapter { |
| 259 | void __iomem * base_addr; | 259 | void __iomem * base_addr; |
| 260 | unsigned long base_addr_pci; | 260 | unsigned long base_addr_pci; |
| 261 | unsigned char irq_number; | ||
| 262 | struct pci_dev *pci_dev; | 261 | struct pci_dev *pci_dev; |
| 263 | struct icom_port port_info[4]; | 262 | struct icom_port port_info[4]; |
| 264 | int index; | 263 | int index; |
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index e4f0dd00ae85..8372ace4a0d9 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -139,7 +139,7 @@ config FB_TILEBLITTING | |||
| 139 | This is particularly important to one driver, matroxfb. If | 139 | This is particularly important to one driver, matroxfb. If |
| 140 | unsure, say N. | 140 | unsure, say N. |
| 141 | 141 | ||
| 142 | comment "Frambuffer hardware drivers" | 142 | comment "Frame buffer hardware drivers" |
| 143 | depends on FB | 143 | depends on FB |
| 144 | 144 | ||
| 145 | config FB_CIRRUS | 145 | config FB_CIRRUS |
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c index 124a085d1f2e..b01b0a457932 100644 --- a/fs/9p/vfs_inode.c +++ b/fs/9p/vfs_inode.c | |||
| @@ -415,7 +415,7 @@ static int v9fs_remove(struct inode *dir, struct dentry *file, int rmdir) | |||
| 415 | file_inode = file->d_inode; | 415 | file_inode = file->d_inode; |
| 416 | sb = file_inode->i_sb; | 416 | sb = file_inode->i_sb; |
| 417 | v9ses = v9fs_inode2v9ses(file_inode); | 417 | v9ses = v9fs_inode2v9ses(file_inode); |
| 418 | v9fid = v9fs_fid_lookup(file); | 418 | v9fid = v9fs_fid_clone(file); |
| 419 | if(IS_ERR(v9fid)) | 419 | if(IS_ERR(v9fid)) |
| 420 | return PTR_ERR(v9fid); | 420 | return PTR_ERR(v9fid); |
| 421 | 421 | ||
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index f01389fd162e..c8178b7b9212 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c | |||
| @@ -54,82 +54,48 @@ | |||
| 54 | static struct reiserfs_xattr_handler *find_xattr_handler_prefix(const char | 54 | static struct reiserfs_xattr_handler *find_xattr_handler_prefix(const char |
| 55 | *prefix); | 55 | *prefix); |
| 56 | 56 | ||
| 57 | static struct dentry *create_xa_root(struct super_block *sb) | 57 | /* Returns the dentry referring to the root of the extended attribute |
| 58 | * directory tree. If it has already been retrieved, it is used. If it | ||
| 59 | * hasn't been created and the flags indicate creation is allowed, we | ||
| 60 | * attempt to create it. On error, we return a pointer-encoded error. | ||
| 61 | */ | ||
| 62 | static struct dentry *get_xa_root(struct super_block *sb, int flags) | ||
| 58 | { | 63 | { |
| 59 | struct dentry *privroot = dget(REISERFS_SB(sb)->priv_root); | 64 | struct dentry *privroot = dget(REISERFS_SB(sb)->priv_root); |
| 60 | struct dentry *xaroot; | 65 | struct dentry *xaroot; |
| 61 | 66 | ||
| 62 | /* This needs to be created at mount-time */ | 67 | /* This needs to be created at mount-time */ |
| 63 | if (!privroot) | 68 | if (!privroot) |
| 64 | return ERR_PTR(-EOPNOTSUPP); | 69 | return ERR_PTR(-ENODATA); |
| 65 | 70 | ||
| 66 | xaroot = lookup_one_len(XAROOT_NAME, privroot, strlen(XAROOT_NAME)); | 71 | mutex_lock(&privroot->d_inode->i_mutex); |
| 67 | if (IS_ERR(xaroot)) { | 72 | if (REISERFS_SB(sb)->xattr_root) { |
| 73 | xaroot = dget(REISERFS_SB(sb)->xattr_root); | ||
| 68 | goto out; | 74 | goto out; |
| 69 | } else if (!xaroot->d_inode) { | ||
| 70 | int err; | ||
| 71 | mutex_lock(&privroot->d_inode->i_mutex); | ||
| 72 | err = | ||
| 73 | privroot->d_inode->i_op->mkdir(privroot->d_inode, xaroot, | ||
| 74 | 0700); | ||
| 75 | mutex_unlock(&privroot->d_inode->i_mutex); | ||
| 76 | |||
| 77 | if (err) { | ||
| 78 | dput(xaroot); | ||
| 79 | dput(privroot); | ||
| 80 | return ERR_PTR(err); | ||
| 81 | } | ||
| 82 | REISERFS_SB(sb)->xattr_root = dget(xaroot); | ||
| 83 | } | 75 | } |
| 84 | 76 | ||
| 85 | out: | ||
| 86 | dput(privroot); | ||
| 87 | return xaroot; | ||
| 88 | } | ||
| 89 | |||
| 90 | /* This will return a dentry, or error, refering to the xa root directory. | ||
| 91 | * If the xa root doesn't exist yet, the dentry will be returned without | ||
| 92 | * an associated inode. This dentry can be used with ->mkdir to create | ||
| 93 | * the xa directory. */ | ||
| 94 | static struct dentry *__get_xa_root(struct super_block *s) | ||
| 95 | { | ||
| 96 | struct dentry *privroot = dget(REISERFS_SB(s)->priv_root); | ||
| 97 | struct dentry *xaroot = NULL; | ||
| 98 | |||
| 99 | if (IS_ERR(privroot) || !privroot) | ||
| 100 | return privroot; | ||
| 101 | |||
| 102 | xaroot = lookup_one_len(XAROOT_NAME, privroot, strlen(XAROOT_NAME)); | 77 | xaroot = lookup_one_len(XAROOT_NAME, privroot, strlen(XAROOT_NAME)); |
| 103 | if (IS_ERR(xaroot)) { | 78 | if (IS_ERR(xaroot)) { |
| 104 | goto out; | 79 | goto out; |
| 105 | } else if (!xaroot->d_inode) { | 80 | } else if (!xaroot->d_inode) { |
| 106 | dput(xaroot); | 81 | int err = -ENODATA; |
| 107 | xaroot = NULL; | 82 | if (flags == 0 || flags & XATTR_CREATE) |
| 108 | goto out; | 83 | err = privroot->d_inode->i_op->mkdir(privroot->d_inode, |
| 84 | xaroot, 0700); | ||
| 85 | if (err) { | ||
| 86 | dput(xaroot); | ||
| 87 | xaroot = ERR_PTR(err); | ||
| 88 | goto out; | ||
| 89 | } | ||
| 109 | } | 90 | } |
| 110 | 91 | REISERFS_SB(sb)->xattr_root = dget(xaroot); | |
| 111 | REISERFS_SB(s)->xattr_root = dget(xaroot); | ||
| 112 | 92 | ||
| 113 | out: | 93 | out: |
| 94 | mutex_unlock(&privroot->d_inode->i_mutex); | ||
| 114 | dput(privroot); | 95 | dput(privroot); |
| 115 | return xaroot; | 96 | return xaroot; |
| 116 | } | 97 | } |
| 117 | 98 | ||
| 118 | /* Returns the dentry (or NULL) referring to the root of the extended | ||
| 119 | * attribute directory tree. If it has already been retrieved, it is used. | ||
| 120 | * Otherwise, we attempt to retrieve it from disk. It may also return | ||
| 121 | * a pointer-encoded error. | ||
| 122 | */ | ||
| 123 | static inline struct dentry *get_xa_root(struct super_block *s) | ||
| 124 | { | ||
| 125 | struct dentry *dentry = dget(REISERFS_SB(s)->xattr_root); | ||
| 126 | |||
| 127 | if (!dentry) | ||
| 128 | dentry = __get_xa_root(s); | ||
| 129 | |||
| 130 | return dentry; | ||
| 131 | } | ||
| 132 | |||
| 133 | /* Opens the directory corresponding to the inode's extended attribute store. | 99 | /* Opens the directory corresponding to the inode's extended attribute store. |
| 134 | * If flags allow, the tree to the directory may be created. If creation is | 100 | * If flags allow, the tree to the directory may be created. If creation is |
| 135 | * prohibited, -ENODATA is returned. */ | 101 | * prohibited, -ENODATA is returned. */ |
| @@ -138,21 +104,11 @@ static struct dentry *open_xa_dir(const struct inode *inode, int flags) | |||
| 138 | struct dentry *xaroot, *xadir; | 104 | struct dentry *xaroot, *xadir; |
| 139 | char namebuf[17]; | 105 | char namebuf[17]; |
| 140 | 106 | ||
| 141 | xaroot = get_xa_root(inode->i_sb); | 107 | xaroot = get_xa_root(inode->i_sb, flags); |
| 142 | if (IS_ERR(xaroot)) { | 108 | if (IS_ERR(xaroot)) |
| 143 | return xaroot; | 109 | return xaroot; |
| 144 | } else if (!xaroot) { | ||
| 145 | if (flags == 0 || flags & XATTR_CREATE) { | ||
| 146 | xaroot = create_xa_root(inode->i_sb); | ||
| 147 | if (IS_ERR(xaroot)) | ||
| 148 | return xaroot; | ||
| 149 | } | ||
| 150 | if (!xaroot) | ||
| 151 | return ERR_PTR(-ENODATA); | ||
| 152 | } | ||
| 153 | 110 | ||
| 154 | /* ok, we have xaroot open */ | 111 | /* ok, we have xaroot open */ |
| 155 | |||
| 156 | snprintf(namebuf, sizeof(namebuf), "%X.%X", | 112 | snprintf(namebuf, sizeof(namebuf), "%X.%X", |
| 157 | le32_to_cpu(INODE_PKEY(inode)->k_objectid), | 113 | le32_to_cpu(INODE_PKEY(inode)->k_objectid), |
| 158 | inode->i_generation); | 114 | inode->i_generation); |
| @@ -821,7 +777,7 @@ int reiserfs_delete_xattrs(struct inode *inode) | |||
| 821 | 777 | ||
| 822 | /* Leftovers besides . and .. -- that's not good. */ | 778 | /* Leftovers besides . and .. -- that's not good. */ |
| 823 | if (dir->d_inode->i_nlink <= 2) { | 779 | if (dir->d_inode->i_nlink <= 2) { |
| 824 | root = get_xa_root(inode->i_sb); | 780 | root = get_xa_root(inode->i_sb, XATTR_REPLACE); |
| 825 | reiserfs_write_lock_xattrs(inode->i_sb); | 781 | reiserfs_write_lock_xattrs(inode->i_sb); |
| 826 | err = vfs_rmdir(root->d_inode, dir); | 782 | err = vfs_rmdir(root->d_inode, dir); |
| 827 | reiserfs_write_unlock_xattrs(inode->i_sb); | 783 | reiserfs_write_unlock_xattrs(inode->i_sb); |
diff --git a/include/linux/taskstats.h b/include/linux/taskstats.h index 3fced4798255..a46104a28f66 100644 --- a/include/linux/taskstats.h +++ b/include/linux/taskstats.h | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | */ | 31 | */ |
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | #define TASKSTATS_VERSION 3 | 34 | #define TASKSTATS_VERSION 4 |
| 35 | #define TS_COMM_LEN 32 /* should be >= TASK_COMM_LEN | 35 | #define TS_COMM_LEN 32 /* should be >= TASK_COMM_LEN |
| 36 | * in linux/sched.h */ | 36 | * in linux/sched.h */ |
| 37 | 37 | ||
| @@ -66,7 +66,7 @@ struct taskstats { | |||
| 66 | /* Delay waiting for cpu, while runnable | 66 | /* Delay waiting for cpu, while runnable |
| 67 | * count, delay_total NOT updated atomically | 67 | * count, delay_total NOT updated atomically |
| 68 | */ | 68 | */ |
| 69 | __u64 cpu_count; | 69 | __u64 cpu_count __attribute__((aligned(8))); |
| 70 | __u64 cpu_delay_total; | 70 | __u64 cpu_delay_total; |
| 71 | 71 | ||
| 72 | /* Following four fields atomically updated using task->delays->lock */ | 72 | /* Following four fields atomically updated using task->delays->lock */ |
| @@ -101,14 +101,17 @@ struct taskstats { | |||
| 101 | 101 | ||
| 102 | /* Basic Accounting Fields start */ | 102 | /* Basic Accounting Fields start */ |
| 103 | char ac_comm[TS_COMM_LEN]; /* Command name */ | 103 | char ac_comm[TS_COMM_LEN]; /* Command name */ |
| 104 | __u8 ac_sched; /* Scheduling discipline */ | 104 | __u8 ac_sched __attribute__((aligned(8))); |
| 105 | /* Scheduling discipline */ | ||
| 105 | __u8 ac_pad[3]; | 106 | __u8 ac_pad[3]; |
| 106 | __u32 ac_uid; /* User ID */ | 107 | __u32 ac_uid __attribute__((aligned(8))); |
| 108 | /* User ID */ | ||
| 107 | __u32 ac_gid; /* Group ID */ | 109 | __u32 ac_gid; /* Group ID */ |
| 108 | __u32 ac_pid; /* Process ID */ | 110 | __u32 ac_pid; /* Process ID */ |
| 109 | __u32 ac_ppid; /* Parent process ID */ | 111 | __u32 ac_ppid; /* Parent process ID */ |
| 110 | __u32 ac_btime; /* Begin time [sec since 1970] */ | 112 | __u32 ac_btime; /* Begin time [sec since 1970] */ |
| 111 | __u64 ac_etime; /* Elapsed time [usec] */ | 113 | __u64 ac_etime __attribute__((aligned(8))); |
| 114 | /* Elapsed time [usec] */ | ||
| 112 | __u64 ac_utime; /* User CPU time [usec] */ | 115 | __u64 ac_utime; /* User CPU time [usec] */ |
| 113 | __u64 ac_stime; /* SYstem CPU time [usec] */ | 116 | __u64 ac_stime; /* SYstem CPU time [usec] */ |
| 114 | __u64 ac_minflt; /* Minor Page Fault Count */ | 117 | __u64 ac_minflt; /* Minor Page Fault Count */ |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 1b255df4fcd0..c904748f2290 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -1676,7 +1676,7 @@ static int proc_dointvec_taint(ctl_table *table, int write, struct file *filp, | |||
| 1676 | { | 1676 | { |
| 1677 | int op; | 1677 | int op; |
| 1678 | 1678 | ||
| 1679 | if (!capable(CAP_SYS_ADMIN)) | 1679 | if (write && !capable(CAP_SYS_ADMIN)) |
| 1680 | return -EPERM; | 1680 | return -EPERM; |
| 1681 | 1681 | ||
| 1682 | op = OP_OR; | 1682 | op = OP_OR; |
diff --git a/mm/migrate.c b/mm/migrate.c index 7a66ca25dc8a..a91ca00abebe 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
| @@ -297,7 +297,7 @@ static int migrate_page_move_mapping(struct address_space *mapping, | |||
| 297 | void **pslot; | 297 | void **pslot; |
| 298 | 298 | ||
| 299 | if (!mapping) { | 299 | if (!mapping) { |
| 300 | /* Anonymous page */ | 300 | /* Anonymous page without mapping */ |
| 301 | if (page_count(page) != 1) | 301 | if (page_count(page) != 1) |
| 302 | return -EAGAIN; | 302 | return -EAGAIN; |
| 303 | return 0; | 303 | return 0; |
| @@ -333,6 +333,19 @@ static int migrate_page_move_mapping(struct address_space *mapping, | |||
| 333 | */ | 333 | */ |
| 334 | __put_page(page); | 334 | __put_page(page); |
| 335 | 335 | ||
| 336 | /* | ||
| 337 | * If moved to a different zone then also account | ||
| 338 | * the page for that zone. Other VM counters will be | ||
| 339 | * taken care of when we establish references to the | ||
| 340 | * new page and drop references to the old page. | ||
| 341 | * | ||
| 342 | * Note that anonymous pages are accounted for | ||
| 343 | * via NR_FILE_PAGES and NR_ANON_PAGES if they | ||
| 344 | * are mapped to swap space. | ||
| 345 | */ | ||
| 346 | __dec_zone_page_state(page, NR_FILE_PAGES); | ||
| 347 | __inc_zone_page_state(newpage, NR_FILE_PAGES); | ||
| 348 | |||
| 336 | write_unlock_irq(&mapping->tree_lock); | 349 | write_unlock_irq(&mapping->tree_lock); |
| 337 | 350 | ||
| 338 | return 0; | 351 | return 0; |
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 2f3916986abf..3791edfffeeb 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
| @@ -176,6 +176,8 @@ static inline int constrained_alloc(struct zonelist *zonelist, gfp_t gfp_mask) | |||
| 176 | struct zone **z; | 176 | struct zone **z; |
| 177 | nodemask_t nodes; | 177 | nodemask_t nodes; |
| 178 | int node; | 178 | int node; |
| 179 | |||
| 180 | nodes_clear(nodes); | ||
| 179 | /* node has memory ? */ | 181 | /* node has memory ? */ |
| 180 | for_each_online_node(node) | 182 | for_each_online_node(node) |
| 181 | if (NODE_DATA(node)->node_present_pages) | 183 | if (NODE_DATA(node)->node_present_pages) |
| @@ -333,7 +335,7 @@ static int oom_kill_task(struct task_struct *p) | |||
| 333 | */ | 335 | */ |
| 334 | do_each_thread(g, q) { | 336 | do_each_thread(g, q) { |
| 335 | if (q->mm == mm && q->tgid != p->tgid) | 337 | if (q->mm == mm && q->tgid != p->tgid) |
| 336 | force_sig(SIGKILL, p); | 338 | force_sig(SIGKILL, q); |
| 337 | } while_each_thread(g, q); | 339 | } while_each_thread(g, q); |
| 338 | 340 | ||
| 339 | return 0; | 341 | return 0; |
