- stable review
Subsystems (9)
cover - stable review
This is the start of the stable review cycle for the 2.6.14.2 release. There are 11 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let us know. If anyone is a maintainer of the proper subsystem, and wants to add a signed-off-by: line to the patch, please respond with it.
These patches are sent out with a number of different people on the Cc:
line. If you wish to be a reviewer, please email [email protected] to add your name to the list. If you want to be off the reviewer list, also email us.
Responses should be made by Saturday, November 12, 18:00:00 UTC Anything received after that time, might be too late.
thanks,
the -stable release team
PATCH 1/11 prism54 : Fix frame length
From: Roger While <[email protected]>
prism54 is leaking information when passing transmits to the firmware. There is no requirement to adjust the length to >= ETH_ZLEN. Just pass the skb length (after possible adjustment).
--- drivers/net/wireless/prism54/islpci_eth.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
drivers/net/wireless/prism54/islpci_eth.c +1 -6
@@ -97,12 +97,6 @@ islpci_eth_transmit(struct sk_buff *skb,/* lock the driver code */ spin_lock_irqsave (&priv->slock, flags); -/* determine the amount of fragments needed to store the frame */ - - frame_size = skb->len <ETH_ZLEN ?ETH_ZLEN : skb->len; -if (init_wds) - frame_size +=6 ; -/* check whether the destination queue has enough fragments for the frame */ curr_frag =le32_to_cpu (cb->driver_curr_frag[ISL38XX_CB_TX_DATA_LQ ]);if (unlikely (curr_frag - priv->free_data_tx >=ISL38XX_CB_TX_QSIZE )) {
@@ -213,6 +207,7 @@ islpci_eth_transmit(struct sk_buff *skb,/* store the skb address for future freeing */ priv->data_low_tx[index] = skb;/* set the proper fragment start address and size information */ + frame_size = skb->len; fragment->size =cpu_to_le16 (frame_size); fragment->flags =cpu_to_le16 (0 );/* set to 1 if more fragments */ fragment->address =cpu_to_le32 (pci_map_address);
--
PATCH 2/11 fix XFS_QUOTA for modular XFS
In reply to Greg KHFrom: Dimitri Puzin <[email protected]>
This patch by Dimitri Puzin submitted through kernel Bugzilla #5514 fixes the following issue:
Cannot build XFS filesystem support as module with quota support. It works only when the XFS filesystem support is compiled into the kernel. Menuconfig prevents from setting CONFIG_XFS_FS=m and CONFIG_XFS_QUOTA=y.
How to reproduce: configure the XFS filesystem with quota support as module. The resulting kernel won't have quota support compiled into xfs.ko.
Fix: Changing the fs/xfs/Kconfig file from tristate to bool lets you configure the quota support to be compiled into the XFS module. The Makefile-linux-2.6 checks only for CONFIG_XFS_QUOTA=y.
--- fs/xfs/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/xfs/Kconfig +1 -1
@@ -24,7 +24,7 @@ config XFS_EXPORT default y config XFS_QUOTA - tristate "XFS Quota support" + bool "XFS Quota support" depends on XFS_FS help If you say Y here, you will be able to set limits for disk usage on
--
PATCH 3/11 Oops on suspend after on-the-fly switch to anticipatory i/o scheduler - PowerBook5, 4
In reply to Greg KHFrom: Jens Axboe <[email protected]>
Quoted 27 lines · Paul Collins
I boot with elevator=cfq (wanted to try the ionice stuff, never got around to it). Having decided to go back to the anticipatory scheduler, I did the following:
# echo anticipatory > /sys/block/hda/queue/scheduler # echo anticipatory > /sys/block/hdc/queue/schedulerA while later I did 'sudo snooze', which produced the Oops below.
Booting with elevator=as and then changing to cfq, sleep works fine. But if I resume and change back to anticipatory I get a similar Oops on the next 'sudo snooze'.
Oops: kernel access of bad area, sig: 11 [#1] NIP: C01E1948 LR: C01D6A60 SP: EFBC5C20 REGS: efbc5b70 TRAP: 0300Not tainted
MSR: 00001032 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11
DAR: 00000020, DSISR: 40000000
TASK = efb012c0[1213] 'pmud' THREAD:efbc4000
Last syscall: 54 GPR00: 00080000 EFBC5C20 EFB012C0 EFE9E044
EFBC5CE8 00000002 00000000 C03B0000 GPR08: C046E5D8 00000000
C03B47C8 E6A58360 22042422 1001E4DC 10010000 10000000 GPR16:
10000000 10000000 10000000 7FE4EB40 10000000 10000000 10010000
C0400000 GPR24: C0380000 00000002 00000002 C046E0C0 00000000
00000002 00000000 EFBC5CE8 NIP [c01e1948]as_insert_request+0xa8/0x6b0
LR [c01d6a60]__elv_add_request+0xa0/0x100
Quoted 12 lines
Call trace: [c01d6a60] __elv_add_request+0xa0/0x100 [c01ffb84] ide_do_drive_cmd+0xb4/0x190 [c01fc1c0] generic_ide_suspend+0x80/0xa0 [c01d4574] suspend_device+0x104/0x160 [c01d47c0] device_suspend+0x120/0x330 [c03f3b50] pmac_suspend_devices+0x50/0x1b0 [c03f4294] pmu_ioctl+0x344/0x9b0 [c0082aa4] do_ioctl+0x84/0x90 [c0082b3c] vfs_ioctl+0x8c/0x460 [c0082f50] sys_ioctl+0x40/0x80 [c0004850] ret_from_syscall+0x0/0x4c
Don't clear ->elevator_data on exit, if we are switching queues we are overwriting the data of the new io scheduler.
--- drivers/block/cfq-iosched.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/block/cfq-iosched.c +1 -3
@@ -2260,10 +2260,8 @@ static void cfq_put_cfqd(struct cfq_dataif (!atomic_dec_and_test (&cfqd->ref))return ; -blk_put_queue (q); -cfq_shutdown_timer_wq (cfqd); - q->elevator->elevator_data =NULL ; +blk_put_queue (q);mempool_destroy (cfqd->crq_pool);kfree (cfqd->crq_hash);
--
PATCH 4/11 USB: always export interface information for modalias
In reply to Greg KHFrom: Greg Kroah-Hartman <[email protected]>
This fixes a problem with some cdc acm devices that were not getting automatically loaded as the module alias was not being reported properly.
This check was for back in the days when we only reported hotplug events for the main usb device, not the interfaces. We should always give the interface information for MODALIAS/modalias as it can be needed.
--- drivers/usb/core/sysfs.c | 33 +++++++++--------------- drivers/usb/core/usb.c | 63 +++++++++++++++++------------------------------ 2 files changed, 36 insertions(+), 60 deletions(-)
drivers/usb/core/sysfs.c +13 -20
@@ -292,30 +292,23 @@ static ssize_t show_modalias(struct devi {struct usb_interface *intf;struct usb_device *udev; -int len; +struct usb_host_interface *alt; intf =to_usb_interface (dev); udev =interface_to_usbdev (intf); + alt = intf->cur_altsetting; - len =sprintf (buf,"usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic" , -le16_to_cpu (udev->descriptor.idVendor), -le16_to_cpu (udev->descriptor.idProduct), -le16_to_cpu (udev->descriptor.bcdDevice), - udev->descriptor.bDeviceClass, - udev->descriptor.bDeviceSubClass, - udev->descriptor.bDeviceProtocol); - buf += len; - -if (udev->descriptor.bDeviceClass ==0 ) { -struct usb_host_interface *alt = intf->cur_altsetting; - -return len +sprintf (buf,"%02Xisc%02Xip%02X\n" , - alt->desc.bInterfaceClass, - alt->desc.bInterfaceSubClass, - alt->desc.bInterfaceProtocol); - }else { -return len +sprintf (buf,"*isc*ip*\n" ); - } +return sprintf (buf,"usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X" +"ic%02Xisc%02Xip%02X\n" , +le16_to_cpu (udev->descriptor.idVendor), +le16_to_cpu (udev->descriptor.idProduct), +le16_to_cpu (udev->descriptor.bcdDevice), + udev->descriptor.bDeviceClass, + udev->descriptor.bDeviceSubClass, + udev->descriptor.bDeviceProtocol, + alt->desc.bInterfaceClass, + alt->desc.bInterfaceSubClass, + alt->desc.bInterfaceProtocol); } static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
drivers/usb/core/usb.c +23 -40
82 lines not on this page · raw message
--
PATCH 5/11 tcp: BIC max increment too large
In reply to Greg KHFrom: Stephen Hemminger <[email protected]>
The max growth of BIC TCP is too large. Original code was based on BIC 1.0 and the default there was 32. Later code (2.6.13) included compensation for delayed acks, and should have reduced the default value to 16; since normally TCP gets one ack for every two packets sent.
The current value of 32 makes BIC too aggressive and unfair to other flows.
--- net/ipv4/tcp_bic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/tcp_bic.c +1 -1
@@ -27,7 +27,7 @@*/ static int fast_convergence =1 ; -static int max_increment =32 ; +static int max_increment =16 ;static int low_window =14 ;static int beta =819 ;/* = 819/1024 (BICTCP_BETA_SCALE) */ static int low_utilization_threshold =153 ;
--
PATCH 6/11 airo.c/airo_cs.c: correct prototypes
In reply to Greg KHFrom: Adrian Bunk <[email protected]>
This patch creates a file airo.h containing prototypes of the global functions in airo.c used by airo_cs.c .
If you got strange problems with either airo_cs devices or in any other completely unrelated part of the kernel shortly or long after a airo_cs device was detected by the kernel, this might have been caused by the fact that caller and callee disagreed regarding the size of the first argument to init_airo_card()...
--- drivers/net/wireless/airo.c | 2 ++ drivers/net/wireless/airo.h | 9 +++++++++ drivers/net/wireless/airo_cs.c | 6 ++---- 3 files changed, 13 insertions(+), 4 deletions(-)
drivers/net/wireless/airo.h new file +9 -0
@@ -0,0 +1,9 @@ +#ifndef _AIRO_H_ +#define _AIRO_H_ + +struct net_device *init_airo_card (unsigned short irq,int port,int is_pcmcia, +struct device *dmdev); +int reset_airo_card (struct net_device *dev); +void stop_airo_card (struct net_device *dev,int freeres); + +#endif /* _AIRO_H_ */
drivers/net/wireless/airo.c +2 -0
@@ -46,6 +46,8 @@#include <linux/pci.h> #include <asm/uaccess.h> +#include "airo.h" +#ifdef CONFIG_PCI static struct pci_device_id card_ids[] = { { 0x14b9, 1, PCI_ANY_ID, PCI_ANY_ID, },
drivers/net/wireless/airo_cs.c +2 -4
@@ -42,6 +42,8 @@#include <asm/io.h> #include <asm/system.h> +#include "airo.h" +/* All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If you do not define PCMCIA_DEBUG at all, all the debug code will be
@@ -78,10 +80,6 @@ MODULE_SUPPORTED_DEVICE("Aironet 4500, 4event handler. */ -struct net_device *init_airo_card (int ,int ,int ,struct device * ); -void stop_airo_card (struct net_device *,int ); -int reset_airo_card (struct net_device * ); -static void airo_config (dev_link_t *link);static void airo_release (dev_link_t *link); static int airo_event(event_t event, int priority,
--
PATCH 7/11 NET: Fix zero-size datagram reception
In reply to Greg KHFrom: Herbert Xu <[email protected]>
The recent rewrite of skb_copy_datagram_iovec broke the reception of zero-size datagrams. This patch fixes it.
--- net/core/datagram.c | 4 ++++ 1 file changed, 4 insertions(+)
net/core/datagram.c +4 -0
@@ -213,6 +213,10 @@ int skb_copy_datagram_iovec(const struct {int i, err, fraglen, end =0 ;struct sk_buff *next =skb_shinfo (skb)->frag_list; + +if (!len) +return 0 ; + next_skb: fraglen =skb_headlen (skb); i =-1 ;
--
PATCH 8/11 - fix signal->live leak in copy_process()
In reply to Greg KHFrom: Oleg Nesterov <[email protected]>
exit_signal() (called from copy_process's error path) should decrement ->signal->live, otherwise forking process will miss 'group_dead' in do_exit().
--- kernel/signal.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/signal.c +2 -0
@@ -406,6 +406,8 @@ void __exit_signal(struct task_struct *tvoid exit_signal (struct task_struct *tsk) { +atomic_dec (&tsk->signal->live); +write_lock_irq (&tasklist_lock);__exit_signal (tsk);write_unlock_irq (&tasklist_lock);
--
PATCH 9/11 fix de_thread() vs send_group_sigqueue() race
In reply to Greg KHFrom: Oleg Nesterov <[email protected]>
When non-leader thread does exec, de_thread calls release_task(leader) before calling exit_itimers(). If local timer interrupt happens in between, it can oops in send_group_sigqueue() while taking ->sighand->siglock == NULL.
However, we can't change send_group_sigqueue() to check p->signal != NULL, because sys_timer_create() does get_task_struct() only in SIGEV_THREAD_ID case. So it is possible that this task_struct was already freed and we can't trust p->signal.
This patch changes de_thread() so that leader released after exit_itimers() call.
--- fs/exec.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
fs/exec.c +7 -3
@@ -593,6 +593,7 @@ static inline int de_thread(struct task_struct signal_struct *sig = tsk->signal;struct sighand_struct *newsighand, *oldsighand = tsk->sighand;spinlock_t *lock = &oldsighand->siglock; +struct task_struct *leader =NULL ;int count;/*
@@ -668,7 +669,7 @@ static inline int de_thread(struct task_* and to assume its PID: */ if (!thread_group_leader (current)) { -struct task_struct *leader = current->group_leader, *parent; +struct task_struct *parent;struct dentry *proc_dentry1, *proc_dentry2;unsigned long exit_state, ptrace;
@@ -677,6 +678,7 @@ static inline int de_thread(struct task_* It should already be zombie at this point, most * of the time. */ + leader = current->group_leader;while (leader->exit_state !=EXIT_ZOMBIE )yield ();
@@ -736,7 +738,6 @@ static inline int de_thread(struct task_proc_pid_flush (proc_dentry2);BUG_ON (exit_state !=EXIT_ZOMBIE ); -release_task (leader); }/*
@@ -746,8 +747,11 @@ static inline int de_thread(struct task_ sig->flags =0 ; no_thread_group: -BUG_ON (atomic_read (&sig->count) !=1 );exit_itimers (sig); +if (leader) +release_task (leader); + +BUG_ON (atomic_read (&sig->count) !=1 );if (atomic_read (&oldsighand->count) ==1 ) {/*
--
PATCH 10/11 ipvs: fix connection leak if expire_nodest_conn=1
In reply to Greg KHFrom: Julian Anastasov <[email protected]>
There was a fix in 2.6.13 that changed the behaviour of ip_vs_conn_expire_now function not to put reference to connection, its callers should hold write lock or connection refcnt. But we forgot to convert one caller, when the real server for connection is unavailable caller should put the connection reference. It happens only when sysctl var expire_nodest_conn is set to 1 and such connections never expire. Thanks to Roberto Nibali who found the problem and tested a 2.4.32-rc2 patch, which is equal to this 2.6 version.
--- net/ipv4/ipvs/ip_vs_core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
net/ipv4/ipvs/ip_vs_core.c +3 -4
@@ -1009,11 +1009,10 @@ ip_vs_in(unsigned int hooknum, struct skif (sysctl_ip_vs_expire_nodest_conn) {/* try to expire the connection immediately */ ip_vs_conn_expire_now (cp); - }else { -/* don't restart its timer, and silently -drop the packet. */ -__ip_vs_conn_put (cp); } +/* don't restart its timer, and silently +drop the packet. */ +__ip_vs_conn_put (cp);return NF_DROP ; }
--
PATCH 11/11 fix alpha breakage
In reply to Greg KHFrom: Ivan Kokshaysky <[email protected]>
barrier.h uses barrier() in non-SMP case. And doesn't include compiler.h.
--- include/asm-alpha/barrier.h | 2 ++ 1 file changed, 2 insertions(+)
include/asm-alpha/barrier.h +2 -0
@@ -1,6 +1,8 @@#ifndef __BARRIER_H#define __BARRIER_H +#include <asm/compiler.h> +#define mb () \ __asm__ __volatile__("mb": : :"memory")
--
Quoted 2 lines · Greg KH
Responses should be made by Saturday, November 12, 18:00:00 UTC Anything received after that time, might be too late.
In talking it over with others, this seems like a bit long. How about Friday, November 11, 06:00:00 UTC instead? Any objections?
thanks,
greg k-h
Quoted 6 lines · Greg KH
Quoted 2 lines · Greg KH
Responses should be made by Saturday, November 12, 18:00:00 UTC Anything received after that time, might be too late.
In talking it over with others, this seems like a bit long. How about Friday, November 11, 06:00:00 UTC instead? Any objections?
That only gives basically part of today and tomorrow, some people might have trouble getting round to checking within that time. I personally sometimes get upto 2 days behind on lkml even when i'm online.
Quoted 6 lines · * Greg KH ([email protected]) wrote:
Quoted 2 lines · Greg KH
Responses should be made by Saturday, November 12, 18:00:00 UTC Anything received after that time, might be too late.
In talking it over with others, this seems like a bit long. How about Friday, November 11, 06:00:00 UTC instead? Any objections?
None here, it's preferable.
cover - stable review
This is the start of the stable review cycle for the 2.6.14.2 release. There are 11 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let us know. If anyone is a maintainer of the proper subsystem, and wants to add a signed-off-by: line to the patch, please respond with it.
These patches are sent out with a number of different people on the Cc:
line. If you wish to be a reviewer, please email [email protected] to add your name to the list. If you want to be off the reviewer list, also email us.
Responses should be made by Saturday, November 12, 18:00:00 UTC Anything received after that time, might be too late.
thanks,
the -stable release team
PATCH 1/11 prism54 : Fix frame length
From: Roger While <[email protected]>
prism54 is leaking information when passing transmits to the firmware. There is no requirement to adjust the length to >= ETH_ZLEN. Just pass the skb length (after possible adjustment).
--- drivers/net/wireless/prism54/islpci_eth.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-)
drivers/net/wireless/prism54/islpci_eth.c +1 -6
@@ -97,12 +97,6 @@ islpci_eth_transmit(struct sk_buff *skb,/* lock the driver code */ spin_lock_irqsave (&priv->slock, flags); -/* determine the amount of fragments needed to store the frame */ - - frame_size = skb->len <ETH_ZLEN ?ETH_ZLEN : skb->len; -if (init_wds) - frame_size +=6 ; -/* check whether the destination queue has enough fragments for the frame */ curr_frag =le32_to_cpu (cb->driver_curr_frag[ISL38XX_CB_TX_DATA_LQ ]);if (unlikely (curr_frag - priv->free_data_tx >=ISL38XX_CB_TX_QSIZE )) {
@@ -213,6 +207,7 @@ islpci_eth_transmit(struct sk_buff *skb,/* store the skb address for future freeing */ priv->data_low_tx[index] = skb;/* set the proper fragment start address and size information */ + frame_size = skb->len; fragment->size =cpu_to_le16 (frame_size); fragment->flags =cpu_to_le16 (0 );/* set to 1 if more fragments */ fragment->address =cpu_to_le32 (pci_map_address);
--
PATCH 2/11 fix XFS_QUOTA for modular XFS
In reply to Greg KHFrom: Dimitri Puzin <[email protected]>
This patch by Dimitri Puzin submitted through kernel Bugzilla #5514 fixes the following issue:
Cannot build XFS filesystem support as module with quota support. It works only when the XFS filesystem support is compiled into the kernel. Menuconfig prevents from setting CONFIG_XFS_FS=m and CONFIG_XFS_QUOTA=y.
How to reproduce: configure the XFS filesystem with quota support as module. The resulting kernel won't have quota support compiled into xfs.ko.
Fix: Changing the fs/xfs/Kconfig file from tristate to bool lets you configure the quota support to be compiled into the XFS module. The Makefile-linux-2.6 checks only for CONFIG_XFS_QUOTA=y.
--- fs/xfs/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/xfs/Kconfig +1 -1
@@ -24,7 +24,7 @@ config XFS_EXPORT default y config XFS_QUOTA - tristate "XFS Quota support" + bool "XFS Quota support" depends on XFS_FS help If you say Y here, you will be able to set limits for disk usage on
--
PATCH 3/11 Oops on suspend after on-the-fly switch to anticipatory i/o scheduler - PowerBook5, 4
In reply to Greg KHFrom: Jens Axboe <[email protected]>
Quoted 27 lines · Paul Collins
I boot with elevator=cfq (wanted to try the ionice stuff, never got around to it). Having decided to go back to the anticipatory scheduler, I did the following:
# echo anticipatory > /sys/block/hda/queue/scheduler # echo anticipatory > /sys/block/hdc/queue/schedulerA while later I did 'sudo snooze', which produced the Oops below.
Booting with elevator=as and then changing to cfq, sleep works fine. But if I resume and change back to anticipatory I get a similar Oops on the next 'sudo snooze'.
Oops: kernel access of bad area, sig: 11 [#1] NIP: C01E1948 LR: C01D6A60 SP: EFBC5C20 REGS: efbc5b70 TRAP: 0300Not tainted
MSR: 00001032 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11
DAR: 00000020, DSISR: 40000000
TASK = efb012c0[1213] 'pmud' THREAD:efbc4000
Last syscall: 54 GPR00: 00080000 EFBC5C20 EFB012C0 EFE9E044
EFBC5CE8 00000002 00000000 C03B0000 GPR08: C046E5D8 00000000
C03B47C8 E6A58360 22042422 1001E4DC 10010000 10000000 GPR16:
10000000 10000000 10000000 7FE4EB40 10000000 10000000 10010000
C0400000 GPR24: C0380000 00000002 00000002 C046E0C0 00000000
00000002 00000000 EFBC5CE8 NIP [c01e1948]as_insert_request+0xa8/0x6b0
LR [c01d6a60]__elv_add_request+0xa0/0x100
Quoted 12 lines
Call trace: [c01d6a60] __elv_add_request+0xa0/0x100 [c01ffb84] ide_do_drive_cmd+0xb4/0x190 [c01fc1c0] generic_ide_suspend+0x80/0xa0 [c01d4574] suspend_device+0x104/0x160 [c01d47c0] device_suspend+0x120/0x330 [c03f3b50] pmac_suspend_devices+0x50/0x1b0 [c03f4294] pmu_ioctl+0x344/0x9b0 [c0082aa4] do_ioctl+0x84/0x90 [c0082b3c] vfs_ioctl+0x8c/0x460 [c0082f50] sys_ioctl+0x40/0x80 [c0004850] ret_from_syscall+0x0/0x4c
Don't clear ->elevator_data on exit, if we are switching queues we are overwriting the data of the new io scheduler.
--- drivers/block/cfq-iosched.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/block/cfq-iosched.c +1 -3
@@ -2260,10 +2260,8 @@ static void cfq_put_cfqd(struct cfq_dataif (!atomic_dec_and_test (&cfqd->ref))return ; -blk_put_queue (q); -cfq_shutdown_timer_wq (cfqd); - q->elevator->elevator_data =NULL ; +blk_put_queue (q);mempool_destroy (cfqd->crq_pool);kfree (cfqd->crq_hash);
--
PATCH 4/11 USB: always export interface information for modalias
In reply to Greg KHFrom: Greg Kroah-Hartman <[email protected]>
This fixes a problem with some cdc acm devices that were not getting automatically loaded as the module alias was not being reported properly.
This check was for back in the days when we only reported hotplug events for the main usb device, not the interfaces. We should always give the interface information for MODALIAS/modalias as it can be needed.
--- drivers/usb/core/sysfs.c | 33 +++++++++--------------- drivers/usb/core/usb.c | 63 +++++++++++++++++------------------------------ 2 files changed, 36 insertions(+), 60 deletions(-)
drivers/usb/core/sysfs.c +13 -20
@@ -292,30 +292,23 @@ static ssize_t show_modalias(struct devi {struct usb_interface *intf;struct usb_device *udev; -int len; +struct usb_host_interface *alt; intf =to_usb_interface (dev); udev =interface_to_usbdev (intf); + alt = intf->cur_altsetting; - len =sprintf (buf,"usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic" , -le16_to_cpu (udev->descriptor.idVendor), -le16_to_cpu (udev->descriptor.idProduct), -le16_to_cpu (udev->descriptor.bcdDevice), - udev->descriptor.bDeviceClass, - udev->descriptor.bDeviceSubClass, - udev->descriptor.bDeviceProtocol); - buf += len; - -if (udev->descriptor.bDeviceClass ==0 ) { -struct usb_host_interface *alt = intf->cur_altsetting; - -return len +sprintf (buf,"%02Xisc%02Xip%02X\n" , - alt->desc.bInterfaceClass, - alt->desc.bInterfaceSubClass, - alt->desc.bInterfaceProtocol); - }else { -return len +sprintf (buf,"*isc*ip*\n" ); - } +return sprintf (buf,"usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X" +"ic%02Xisc%02Xip%02X\n" , +le16_to_cpu (udev->descriptor.idVendor), +le16_to_cpu (udev->descriptor.idProduct), +le16_to_cpu (udev->descriptor.bcdDevice), + udev->descriptor.bDeviceClass, + udev->descriptor.bDeviceSubClass, + udev->descriptor.bDeviceProtocol, + alt->desc.bInterfaceClass, + alt->desc.bInterfaceSubClass, + alt->desc.bInterfaceProtocol); } static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
drivers/usb/core/usb.c +23 -40
82 lines not on this page · raw message
--
PATCH 5/11 tcp: BIC max increment too large
In reply to Greg KHFrom: Stephen Hemminger <[email protected]>
The max growth of BIC TCP is too large. Original code was based on BIC 1.0 and the default there was 32. Later code (2.6.13) included compensation for delayed acks, and should have reduced the default value to 16; since normally TCP gets one ack for every two packets sent.
The current value of 32 makes BIC too aggressive and unfair to other flows.
--- net/ipv4/tcp_bic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/tcp_bic.c +1 -1
@@ -27,7 +27,7 @@*/ static int fast_convergence =1 ; -static int max_increment =32 ; +static int max_increment =16 ;static int low_window =14 ;static int beta =819 ;/* = 819/1024 (BICTCP_BETA_SCALE) */ static int low_utilization_threshold =153 ;
--
PATCH 6/11 airo.c/airo_cs.c: correct prototypes
In reply to Greg KHFrom: Adrian Bunk <[email protected]>
This patch creates a file airo.h containing prototypes of the global functions in airo.c used by airo_cs.c .
If you got strange problems with either airo_cs devices or in any other completely unrelated part of the kernel shortly or long after a airo_cs device was detected by the kernel, this might have been caused by the fact that caller and callee disagreed regarding the size of the first argument to init_airo_card()...
--- drivers/net/wireless/airo.c | 2 ++ drivers/net/wireless/airo.h | 9 +++++++++ drivers/net/wireless/airo_cs.c | 6 ++---- 3 files changed, 13 insertions(+), 4 deletions(-)
drivers/net/wireless/airo.h new file +9 -0
@@ -0,0 +1,9 @@ +#ifndef _AIRO_H_ +#define _AIRO_H_ + +struct net_device *init_airo_card (unsigned short irq,int port,int is_pcmcia, +struct device *dmdev); +int reset_airo_card (struct net_device *dev); +void stop_airo_card (struct net_device *dev,int freeres); + +#endif /* _AIRO_H_ */
drivers/net/wireless/airo.c +2 -0
@@ -46,6 +46,8 @@#include <linux/pci.h> #include <asm/uaccess.h> +#include "airo.h" +#ifdef CONFIG_PCI static struct pci_device_id card_ids[] = { { 0x14b9, 1, PCI_ANY_ID, PCI_ANY_ID, },
drivers/net/wireless/airo_cs.c +2 -4
@@ -42,6 +42,8 @@#include <asm/io.h> #include <asm/system.h> +#include "airo.h" +/* All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If you do not define PCMCIA_DEBUG at all, all the debug code will be
@@ -78,10 +80,6 @@ MODULE_SUPPORTED_DEVICE("Aironet 4500, 4event handler. */ -struct net_device *init_airo_card (int ,int ,int ,struct device * ); -void stop_airo_card (struct net_device *,int ); -int reset_airo_card (struct net_device * ); -static void airo_config (dev_link_t *link);static void airo_release (dev_link_t *link); static int airo_event(event_t event, int priority,
--
PATCH 7/11 NET: Fix zero-size datagram reception
In reply to Greg KHFrom: Herbert Xu <[email protected]>
The recent rewrite of skb_copy_datagram_iovec broke the reception of zero-size datagrams. This patch fixes it.
--- net/core/datagram.c | 4 ++++ 1 file changed, 4 insertions(+)
net/core/datagram.c +4 -0
@@ -213,6 +213,10 @@ int skb_copy_datagram_iovec(const struct {int i, err, fraglen, end =0 ;struct sk_buff *next =skb_shinfo (skb)->frag_list; + +if (!len) +return 0 ; + next_skb: fraglen =skb_headlen (skb); i =-1 ;
--
PATCH 8/11 - fix signal->live leak in copy_process()
In reply to Greg KHFrom: Oleg Nesterov <[email protected]>
exit_signal() (called from copy_process's error path) should decrement ->signal->live, otherwise forking process will miss 'group_dead' in do_exit().
--- kernel/signal.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/signal.c +2 -0
@@ -406,6 +406,8 @@ void __exit_signal(struct task_struct *tvoid exit_signal (struct task_struct *tsk) { +atomic_dec (&tsk->signal->live); +write_lock_irq (&tasklist_lock);__exit_signal (tsk);write_unlock_irq (&tasklist_lock);
--
PATCH 9/11 fix de_thread() vs send_group_sigqueue() race
In reply to Greg KHFrom: Oleg Nesterov <[email protected]>
When non-leader thread does exec, de_thread calls release_task(leader) before calling exit_itimers(). If local timer interrupt happens in between, it can oops in send_group_sigqueue() while taking ->sighand->siglock == NULL.
However, we can't change send_group_sigqueue() to check p->signal != NULL, because sys_timer_create() does get_task_struct() only in SIGEV_THREAD_ID case. So it is possible that this task_struct was already freed and we can't trust p->signal.
This patch changes de_thread() so that leader released after exit_itimers() call.
--- fs/exec.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
fs/exec.c +7 -3
@@ -593,6 +593,7 @@ static inline int de_thread(struct task_struct signal_struct *sig = tsk->signal;struct sighand_struct *newsighand, *oldsighand = tsk->sighand;spinlock_t *lock = &oldsighand->siglock; +struct task_struct *leader =NULL ;int count;/*
@@ -668,7 +669,7 @@ static inline int de_thread(struct task_* and to assume its PID: */ if (!thread_group_leader (current)) { -struct task_struct *leader = current->group_leader, *parent; +struct task_struct *parent;struct dentry *proc_dentry1, *proc_dentry2;unsigned long exit_state, ptrace;
@@ -677,6 +678,7 @@ static inline int de_thread(struct task_* It should already be zombie at this point, most * of the time. */ + leader = current->group_leader;while (leader->exit_state !=EXIT_ZOMBIE )yield ();
@@ -736,7 +738,6 @@ static inline int de_thread(struct task_proc_pid_flush (proc_dentry2);BUG_ON (exit_state !=EXIT_ZOMBIE ); -release_task (leader); }/*
@@ -746,8 +747,11 @@ static inline int de_thread(struct task_ sig->flags =0 ; no_thread_group: -BUG_ON (atomic_read (&sig->count) !=1 );exit_itimers (sig); +if (leader) +release_task (leader); + +BUG_ON (atomic_read (&sig->count) !=1 );if (atomic_read (&oldsighand->count) ==1 ) {/*
--
PATCH 10/11 ipvs: fix connection leak if expire_nodest_conn=1
In reply to Greg KHFrom: Julian Anastasov <[email protected]>
There was a fix in 2.6.13 that changed the behaviour of ip_vs_conn_expire_now function not to put reference to connection, its callers should hold write lock or connection refcnt. But we forgot to convert one caller, when the real server for connection is unavailable caller should put the connection reference. It happens only when sysctl var expire_nodest_conn is set to 1 and such connections never expire. Thanks to Roberto Nibali who found the problem and tested a 2.4.32-rc2 patch, which is equal to this 2.6 version.
--- net/ipv4/ipvs/ip_vs_core.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
net/ipv4/ipvs/ip_vs_core.c +3 -4
@@ -1009,11 +1009,10 @@ ip_vs_in(unsigned int hooknum, struct skif (sysctl_ip_vs_expire_nodest_conn) {/* try to expire the connection immediately */ ip_vs_conn_expire_now (cp); - }else { -/* don't restart its timer, and silently -drop the packet. */ -__ip_vs_conn_put (cp); } +/* don't restart its timer, and silently +drop the packet. */ +__ip_vs_conn_put (cp);return NF_DROP ; }
--
PATCH 11/11 fix alpha breakage
In reply to Greg KHFrom: Ivan Kokshaysky <[email protected]>
barrier.h uses barrier() in non-SMP case. And doesn't include compiler.h.
--- include/asm-alpha/barrier.h | 2 ++ 1 file changed, 2 insertions(+)
include/asm-alpha/barrier.h +2 -0
@@ -1,6 +1,8 @@#ifndef __BARRIER_H#define __BARRIER_H +#include <asm/compiler.h> +#define mb () \ __asm__ __volatile__("mb": : :"memory")
--
Quoted 1 line · Greg KH
This is the start of the stable review cycle for the 2.6.14.2 release.
Bah, that's what I get for eating too many cookies instead of lunch... The real announcement will go out next, sorry about that...
greg k-h