Linux 2.6.32.33
Subsystems (17)
I'm announcing the release of the 2.6.32.33 kernel.
All users of the 2.6.32 kernel series must upgrade.
The updated 2.6.32.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/longterm/linux-2.6.32.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/longterm/linux-2.6.32.y.git;a=summarythanks,
greg k-h
------------
Makefile | 2 - arch/x86/include/asm/smpboot_hooks.h | 2 - drivers/gpu/drm/drm_irq.c | 3 +- drivers/hid/hid-core.c | 1 drivers/hid/hid-cypress.c | 2 + drivers/hid/hid-ids.h | 1 drivers/mfd/ucb1x00-ts.c | 12 ++++++-- drivers/net/e1000e/netdev.c | 3 +- drivers/net/netxen/netxen_nic_hw.c | 3 ++ drivers/net/r8169.c | 6 ++++ drivers/net/wireless/p54/p54usb.c | 1 drivers/usb/misc/iowarrior.c | 2 - drivers/virtio/virtio_pci.c | 1 fs/cifs/cifsproto.h | 2 - fs/cifs/cifssmb.c | 4 ++ fs/cifs/file.c | 17 ++++++----- fs/ext2/namei.c | 9 +----- fs/fuse/file.c | 52 ++++++++++++++++++++++++++++++----- fs/fuse/fuse_i.h | 6 +++- fs/ocfs2/refcounttree.c | 7 +++- include/drm/drmP.h | 2 - include/net/sctp/command.h | 1 kernel/time/tick-broadcast.c | 10 ++++++ kernel/time/tick-common.c | 6 +++- kernel/time/tick-internal.h | 3 ++ net/dccp/input.c | 7 ++-- net/ipv4/devinet.c | 30 +++++++++++++------- net/sctp/sm_make_chunk.c | 15 ---------- net/sctp/sm_sideeffect.c | 26 +++++++++++++++++ net/sctp/sm_statefuns.c | 8 ++++- 30 files changed, 177 insertions(+), 67 deletions(-)
Amit Kumar Salecha (1):
netxen: fix set mac addr
Bruce Allan (1):
e1000e: disable broken PHY wakeup for ICH10 LOMs, use MAC wakeup instead
Christian Lamparter (1):
p54usb: add Senao NUB-350 usbid
Dave Airlie (1):
drm: fix unsigned vs signed comparison issue in modeset ctl ioctl.
Don Zickus (1):
x86: Use u32 instead of long to set reset vector back to 0
Gerrit Renker (1):
dccp: fix oops on Reset after close
Greg Kroah-Hartman (1):
Linux 2.6.32.32
Ian Campbell (1):
arp_notify: unconditionally send gratuitous ARP for NETDEV_NOTIFY_PEERS.
Jiri Kosina (1):
HID: add support for Acan FG-8100 barcode reader
Jochen Friedrich (1):
mfd: Fix NULL pointer due to non-initialized ucb1x00-ts absinfo
Josh Hunt (1):
ext2: Fix link count corruption under heavy link+rename load
Kees Cook (1):
usb: iowarrior: don't trust report_size for buffer size
Michael S. Tsirkin (1):
virtio: set pci bus master enable bit
Miklos Szeredi (1):
fuse: fix hang of single threaded fuseblk filesystem
Pavel Shilovsky (1):
CIFS: Fix oplock break handling (try #2)
Stanislaw Gruszka (1):
r8169: disable ASPM
Thomas Gleixner (1):
clockevents: Prevent oneshot mode when broadcast device is periodic
Tristan Ye (1):
Ocfs2/refcounttree: Fix a bug for refcounttree to writeback clusters in a right number.
Vlad Yasevich (1):
sctp: Fix oops when sending queued ASCONF chunks
Makefile +1 -1
@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 -EXTRAVERSION = .31 +EXTRAVERSION = .32 NAME = Man-Eating Seals of Antiquity # *DOCUMENTATION*
arch/x86/include/asm/smpboot_hooks.h +1 -1
@@ -34,7 +34,7 @@ static inline void smpboot_restore_warm_reset_vector(void)*/ CMOS_WRITE (0 ,0xf ); - *((volatile long *)phys_to_virt (apic->trampoline_phys_low)) =0 ; + *((volatile u32 *)phys_to_virt (apic->trampoline_phys_low)) =0 ; }static inline void __init smpboot_setup_io_apic (void )
drivers/gpu/drm/drm_irq.c +2 -1
@@ -540,7 +540,8 @@ int drm_modeset_ctl(struct drm_device *dev, void *data, struct drm_file *file_priv) {struct drm_modeset_ctl *modeset = data; -int crtc, ret =0 ; +int ret =0 ; +unsigned int crtc;/* If drm_vblank_init() hasn't been called yet, just no-op */ if (!dev->num_crtcs)
drivers/hid/hid-core.c +1 -0
@@ -1297,6 +1297,7 @@ static const struct hid_device_id hid_blacklist[] = { { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) }, { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
drivers/hid/hid-cypress.c +2 -0
@@ -126,6 +126,8 @@ static const struct hid_device_id cp_devices[] = { .driver_data = CP_RDESC_SWAPPED_MIN_MAX }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2), .driver_data = CP_RDESC_SWAPPED_MIN_MAX }, + { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3), + .driver_data = CP_RDESC_SWAPPED_MIN_MAX }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE), .driver_data = CP_2WHEEL_MOUSE_HACK }, { }
drivers/hid/hid-ids.h +1 -0
@@ -148,6 +148,7 @@#define USB_DEVICE_ID_CYPRESS_ULTRAMOUSE 0x7417#define USB_DEVICE_ID_CYPRESS_BARCODE_1 0xde61#define USB_DEVICE_ID_CYPRESS_BARCODE_2 0xde64 +#define USB_DEVICE_ID_CYPRESS_BARCODE_3 0xbca1#define USB_VENDOR_ID_DEALEXTREAME 0x10c5#define USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 0x819a
drivers/mfd/ucb1x00-ts.c +9 -3
@@ -385,12 +385,18 @@ static int ucb1x00_ts_add(struct ucb1x00_dev *dev) idev->close = ucb1x00_ts_close;__set_bit (EV_ABS , idev->evbit); -__set_bit (ABS_X , idev->absbit); -__set_bit (ABS_Y , idev->absbit); -__set_bit (ABS_PRESSURE , idev->absbit);input_set_drvdata (idev, ts); +ucb1x00_adc_enable (ts->ucb); + ts->x_res =ucb1x00_ts_read_xres (ts); + ts->y_res =ucb1x00_ts_read_yres (ts); +ucb1x00_adc_disable (ts->ucb); + +input_set_abs_params (idev,ABS_X ,0 , ts->x_res,0 ,0 ); +input_set_abs_params (idev,ABS_Y ,0 , ts->y_res,0 ,0 ); +input_set_abs_params (idev,ABS_PRESSURE ,0 ,0 ,0 ,0 ); + err =input_register_device (idev);if (err) goto fail;
drivers/net/e1000e/netdev.c +2 -1
@@ -5186,7 +5186,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,/* APME bit in EEPROM is mapped to WUC.APME */ eeprom_data =er32 (WUC ); eeprom_apme_mask =E1000_WUC_APME ; -if (eeprom_data &E1000_WUC_PHY_WAKE ) +if ((hw->mac.type > e1000_ich10lan) && + (eeprom_data &E1000_WUC_PHY_WAKE )) adapter->flags2 |=FLAG2_HAS_PHY_WAKEUP ; }else if (adapter->flags &FLAG_APME_IN_CTRL3 ) { if (adapter->flags & FLAG_APME_CHECK_PORT_B &&
drivers/net/netxen/netxen_nic_hw.c +3 -0
@@ -685,6 +685,9 @@ void netxen_p3_nic_set_multi(struct net_device *netdev)struct list_head *head;nx_mac_list_t *cur; +if (adapter->is_up !=NETXEN_ADAPTER_UP_MAGIC ) +return ; +list_splice_tail_init (&adapter->mac_list, &del_list);nx_p3_nic_add_mac (adapter, adapter->mac_addr, &del_list);
drivers/net/r8169.c +6 -0
@@ -23,6 +23,7 @@#include <linux/tcp.h> #include <linux/init.h> #include <linux/dma-mapping.h> +#include <linux/pci-aspm.h> #include <asm/system.h> #include <asm/io.h>
@@ -3030,6 +3031,11 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) mii->reg_num_mask =0x1f ; mii->supports_gmii = !!(cfg->features &RTL_FEATURE_GMII ); +/* disable ASPM completely as that cause random device stop working +* problems as well as full system hangs for some PCIe devices users */ +pci_disable_link_state (pdev,PCIE_LINK_STATE_L0S |PCIE_LINK_STATE_L1 | +PCIE_LINK_STATE_CLKPM ); +/* enable device (incl. PCI PM wakeup and hotplug setup) */ rc =pci_enable_device (pdev);if (rc <0 ) {
drivers/net/wireless/p54/p54usb.c +1 -0
@@ -95,6 +95,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { {USB_DEVICE(0x1413, 0x5400)}, /* Telsey 802.11g USB2.0 Adapter */ {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */ {USB_DEVICE(0x1668, 0x1050)}, /* Actiontec 802UIG-1 */ + {USB_DEVICE(0x1740, 0x1000)}, /* Senao NUB-350 */ {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */ {USB_DEVICE(0x2001, 0x3705)}, /* D-Link DWL-G120 rev C1 */ {USB_DEVICE(0x413c, 0x5513)}, /* Dell WLA3310 USB Wireless Adapter */
drivers/usb/misc/iowarrior.c +1 -1
@@ -373,7 +373,7 @@ static ssize_t iowarrior_write(struct file *file,case USB_DEVICE_ID_CODEMERCS_IOWPV2 :case USB_DEVICE_ID_CODEMERCS_IOW40 :/* IOW24 and IOW40 use a synchronous call */ - buf =kmalloc (8 ,GFP_KERNEL );/* 8 bytes are enough for both products */ + buf =kmalloc (count,GFP_KERNEL );if (!buf) { retval = -ENOMEM ; goto exit;
drivers/virtio/virtio_pci.c +1 -0
@@ -647,6 +647,7 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, goto out_req_regions;pci_set_drvdata (pci_dev, vp_dev); +pci_set_master (pci_dev);/* we use the subsystem vendor/device id as the virtio vendor/device * id. this allows us to use the same PCI vendor/device id for all
fs/cifs/cifsproto.h +1 -1
@@ -323,7 +323,7 @@ extern int CIFSSMBLock(const int xid, struct cifsTconInfo *tcon, const __u16 netfid, const __u64 len, const __u64 offset, const __u32 numUnlock, const __u32 numLock, const __u8 lockType, - const bool waitFlag); + const bool waitFlag, const __u8 oplock_level); extern int CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon, const __u16 smb_file_id, const int get_flag, const __u64 len, struct file_lock *,
fs/cifs/cifssmb.c +3 -1
@@ -1641,7 +1641,8 @@ int CIFSSMBLock(const int xid, struct cifsTconInfo *tcon, const __u16 smb_file_id, const __u64 len, const __u64 offset, const __u32 numUnlock, - const __u32 numLock, const __u8 lockType, const bool waitFlag) + const __u32 numLock, const __u8 lockType, + const bool waitFlag, const __u8 oplock_level) { int rc = 0;LOCK_REQ *pSMB =NULL ;
@@ -1669,6 +1670,7 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon, pSMB->NumberOfLocks =cpu_to_le16 (numLock); pSMB->NumberOfUnlocks =cpu_to_le16 (numUnlock); pSMB->LockType = lockType; + pSMB->OplockLevel = oplock_level; pSMB->AndXCommand =0xFF ;/* none */ pSMB->Fid = smb_file_id;/* netfid stays le */
fs/cifs/file.c +9 -8
@@ -825,12 +825,12 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)/* BB we could chain these into one lock request BB */ rc =CIFSSMBLock (xid, tcon, netfid, length, pfLock->fl_start, -0 ,1 , lockType,0 /* wait flag */ ); +0 ,1 , lockType,0 /* wait flag */ ,0 );if (rc ==0 ) { rc =CIFSSMBLock (xid, tcon, netfid, length, pfLock->fl_start,1 /* numUnlock */ ,0 /* numLock */ , lockType, -0 /* wait flag */ ); +0 /* wait flag */ ,0 ); pfLock->fl_type =F_UNLCK ;if (rc !=0 ) cERROR(1, ("Error unlocking previously locked "
@@ -873,8 +873,8 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)if (numLock) { rc =CIFSSMBLock (xid, tcon, netfid, length, - pfLock->fl_start, -0 , numLock, lockType, wait_flag); + pfLock->fl_start,0 , numLock, lockType, + wait_flag,0 );if (rc ==0 ) {/* For Windows locks we must store them. */
@@ -894,9 +894,9 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock) (pfLock->fl_start + length) >= (li->offset + li->length)) { stored_rc =CIFSSMBLock (xid, tcon, - netfid, - li->length, li->offset, -1 ,0 , li->type, false); + netfid, li->length, + li->offset,1 ,0 , + li->type, false,0 );if (stored_rc) rc = stored_rc;
@@ -2314,7 +2314,8 @@ cifs_oplock_break(struct slow_work *work)*/ if (!cfile->closePend && !cfile->oplock_break_cancelled) { rc =CIFSSMBLock (0 , cifs_sb->tcon, cfile->netfid,0 ,0 ,0 ,0 , -LOCKING_ANDX_OPLOCK_RELEASE , false); +LOCKING_ANDX_OPLOCK_RELEASE , false, + cinode->clientCanCacheRead ?1 :0 );cFYI (1 , ("Oplock release rc = %d" , rc)); } }
fs/ext2/namei.c +2 -7
@@ -327,7 +327,6 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, new_de =ext2_find_entry (new_dir, &new_dentry->d_name, &new_page);if (!new_de) goto out_dir; -inode_inc_link_count (old_inode);ext2_set_link (new_dir, new_de, new_page, old_inode,1 ); new_inode->i_ctime =CURRENT_TIME_SEC ;if (dir_de)
@@ -339,12 +338,9 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,if (new_dir->i_nlink >=EXT2_LINK_MAX ) goto out_dir; } -inode_inc_link_count (old_inode); err =ext2_add_link (new_dentry, old_inode); -if (err) { -inode_dec_link_count (old_inode); +if (err) goto out_dir; - }if (dir_de)inode_inc_link_count (new_dir); }
@@ -352,12 +348,11 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,/* * Like most other Unix systems, set the ctime for inodes on a * rename. -* inode_dec_link_count() will mark the inode dirty. */ old_inode->i_ctime =CURRENT_TIME_SEC ; +mark_inode_dirty (old_inode);ext2_delete_entry (old_de, old_page); -inode_dec_link_count (old_inode);if (dir_de) {if (old_dir != new_dir)
fs/fuse/file.c +45 -7
85 lines not on this page · raw message
fs/fuse/fuse_i.h +5 -1
@@ -21,6 +21,7 @@#include <linux/rwsem.h> #include <linux/rbtree.h> #include <linux/poll.h> +#include <linux/workqueue.h> /** Max number of pages that can be used in a single read request */ #define FUSE_MAX_PAGES_PER_REQ 32
@@ -254,7 +255,10 @@ struct fuse_req {union {struct fuse_forget_in forget_in;struct { -struct fuse_release_in in; +union { +struct fuse_release_in in; +struct work_struct work; + };struct path path; } release;struct fuse_init_in init_in;
fs/ocfs2/refcounttree.c +5 -2
@@ -3236,7 +3236,7 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, u32 num_clusters, unsigned int e_flags) { int ret, delete, index, credits = 0; -u32 new_bit, new_len; +u32 new_bit, new_len, orig_num_clusters;unsigned int set_len;struct ocfs2_super *osb =OCFS2_SB (sb);handle_t *handle;
@@ -3269,6 +3269,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb, goto out; } + orig_num_clusters = num_clusters; +while (num_clusters) { ret = ocfs2_get_refcount_rec(ref_ci, context->ref_root_bh, p_cluster, num_clusters,
@@ -3356,7 +3358,8 @@ static int ocfs2_make_clusters_writable(struct super_block *sb,* in write-back mode. */ if (context->get_clusters == ocfs2_di_get_clusters) { - ret =ocfs2_cow_sync_writeback (sb, context, cpos, num_clusters); + ret =ocfs2_cow_sync_writeback (sb, context, cpos, + orig_num_clusters);if (ret)mlog_errno (ret); }
include/drm/drmP.h +1 -1
@@ -1016,7 +1016,7 @@ struct drm_device {struct pci_controller *hose;#endif struct drm_sg_mem *sg;/**< Scatter gather memory */ -int num_crtcs;/**< Number of CRTCs on this device */ +unsigned int num_crtcs;/**< Number of CRTCs on this device */ void *dev_private;/**< device private data */ void *mm_private;struct address_space *dev_mapping;
include/net/sctp/command.h +1 -0
@@ -107,6 +107,7 @@ typedef enum {SCTP_CMD_T1_RETRAN ,/* Mark for retransmission after T1 timeout */ SCTP_CMD_UPDATE_INITTAG ,/* Update peer inittag */ SCTP_CMD_SEND_MSG ,/* Send the whole use message */ +SCTP_CMD_SEND_NEXT_ASCONF ,/* Send the next ASCONF after ACK */ SCTP_CMD_LAST } sctp_verb_t;
kernel/time/tick-broadcast.c +10 -0
@@ -600,4 +600,14 @@ int tick_broadcast_oneshot_active(void) return tick_broadcast_device.mode == TICKDEV_MODE_ONESHOT; } +/* +* Check whether the broadcast device supports oneshot. +*/ +bool tick_broadcast_oneshot_available (void ) +{ +struct clock_event_device *bc = tick_broadcast_device.evtdev; + +return bc ? bc->features &CLOCK_EVT_FEAT_ONESHOT : false; +} +#endif
kernel/time/tick-common.c +5 -1
@@ -51,7 +51,11 @@ int tick_is_oneshot_available(void) {struct clock_event_device *dev =__get_cpu_var (tick_cpu_device).evtdev; -return dev && (dev->features &CLOCK_EVT_FEAT_ONESHOT ); +if (!dev || !(dev->features &CLOCK_EVT_FEAT_ONESHOT )) +return 0 ; +if (!(dev->features &CLOCK_EVT_FEAT_C3STOP )) +return 1 ; +return tick_broadcast_oneshot_available (); }/*
kernel/time/tick-internal.h +3 -0
@@ -37,6 +37,7 @@ extern void tick_shutdown_broadcast_oneshot(unsigned int *cpup);extern int tick_resume_broadcast_oneshot (struct clock_event_device *bc);extern int tick_broadcast_oneshot_active (void );extern void tick_check_oneshot_broadcast (int cpu); +bool tick_broadcast_oneshot_available (void );# else /* BROADCAST */ static inline void tick_broadcast_setup_oneshot (struct clock_event_device *bc) {
@@ -47,6 +48,7 @@ static inline void tick_broadcast_switch_to_oneshot(void) { }static inline void tick_shutdown_broadcast_oneshot (unsigned int *cpup) { }static inline int tick_broadcast_oneshot_active (void ) {return 0 ; }static inline void tick_check_oneshot_broadcast (int cpu) { } +static inline bool tick_broadcast_oneshot_available (void ) {return true; }# endif /* !BROADCAST */ #else /* !ONESHOT */
@@ -77,6 +79,7 @@ static inline int tick_resume_broadcast_oneshot(struct clock_event_device *bc) return 0; }static inline int tick_broadcast_oneshot_active (void ) {return 0 ; } +static inline bool tick_broadcast_oneshot_available (void ) {return false; }#endif /* !TICK_ONESHOT */ /*
net/dccp/input.c +3 -4
@@ -616,6 +616,9 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,/* Caller (dccp_v4_do_rcv) will send Reset */ dcb->dccpd_reset_code =DCCP_RESET_CODE_NO_CONNECTION ;return 1 ; + }else if (sk->sk_state ==DCCP_CLOSED ) { + dcb->dccpd_reset_code =DCCP_RESET_CODE_NO_CONNECTION ; +return 1 ; }if (sk->sk_state !=DCCP_REQUESTING && sk->sk_state !=DCCP_RESPOND ) {
@@ -678,10 +681,6 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, }switch (sk->sk_state) { -case DCCP_CLOSED : - dcb->dccpd_reset_code =DCCP_RESET_CODE_NO_CONNECTION ; -return 1 ; -case DCCP_REQUESTING : queued =dccp_rcv_request_sent_state_process (sk, skb, dh, len);if (queued >=0 )
net/ipv4/devinet.c +20 -10
@@ -1025,6 +1025,21 @@ static inline bool inetdev_valid_mtu(unsigned mtu)return mtu >=68 ; } +static void inetdev_send_gratuitous_arp (struct net_device *dev, +struct in_device *in_dev) + +{ +struct in_ifaddr *ifa = in_dev->ifa_list; + +if (!ifa) +return ; + +arp_send (ARPOP_REQUEST ,ETH_P_ARP , + ifa->ifa_address, dev, + ifa->ifa_address,NULL , + dev->dev_addr,NULL ); +} +/* Called only under RTNL semaphore */ static int inetdev_event(struct notifier_block *this, unsigned long event,
@@ -1076,18 +1091,13 @@ static int inetdev_event(struct notifier_block *this, unsigned long event, }ip_mc_up (in_dev);/* fall through */ -case NETDEV_NOTIFY_PEERS :case NETDEV_CHANGEADDR : +if (!IN_DEV_ARP_NOTIFY (in_dev)) +break ; +/* fall through */ +case NETDEV_NOTIFY_PEERS :/* Send gratuitous ARP to notify of link change */ -if (IN_DEV_ARP_NOTIFY (in_dev)) { -struct in_ifaddr *ifa = in_dev->ifa_list; - -if (ifa) -arp_send (ARPOP_REQUEST ,ETH_P_ARP , - ifa->ifa_address, dev, - ifa->ifa_address,NULL , - dev->dev_addr,NULL ); - } +inetdev_send_gratuitous_arp (dev, in_dev);break ;case NETDEV_DOWN :ip_mc_down (in_dev);
net/sctp/sm_make_chunk.c +0 -15
@@ -3361,21 +3361,6 @@ int sctp_process_asconf_ack(struct sctp_association *asoc,sctp_chunk_free (asconf); asoc->addip_last_asconf =NULL ; -/* Send the next asconf chunk from the addip chunk queue. */ -if (!list_empty (&asoc->addip_chunk_list)) { -struct list_head *entry = asoc->addip_chunk_list.next; - asconf = list_entry(entry, struct sctp_chunk, list); - -list_del_init (entry); - -/* Hold the chunk until an ASCONF_ACK is received. */ -sctp_chunk_hold (asconf); -if (sctp_primitive_ASCONF (asoc, asconf)) -sctp_chunk_free (asconf); -else - asoc->addip_last_asconf = asconf; - } -return retval; }
net/sctp/sm_sideeffect.c +26 -0
@@ -997,6 +997,29 @@ static int sctp_cmd_send_msg(struct sctp_association *asoc, } +/* Sent the next ASCONF packet currently stored in the association. +* This happens after the ASCONF_ACK was succeffully processed. +*/ +static void sctp_cmd_send_asconf (struct sctp_association *asoc) +{ +/* Send the next asconf chunk from the addip chunk +* queue. +*/ +if (!list_empty (&asoc->addip_chunk_list)) { +struct list_head *entry = asoc->addip_chunk_list.next; +struct sctp_chunk *asconf =list_entry (entry, + struct sctp_chunk, list); +list_del_init (entry); + +/* Hold the chunk until an ASCONF_ACK is received. */ +sctp_chunk_hold (asconf); +if (sctp_primitive_ASCONF (asoc, asconf)) +sctp_chunk_free (asconf); +else + asoc->addip_last_asconf = asconf; + } +} +/* These three macros allow us to pull the debugging code out of the * main flow of sctp_do_sm() to keep attention focused on the real
@@ -1650,6 +1673,9 @@ static int sctp_cmd_interpreter(sctp_event_t event_type, } error =sctp_cmd_send_msg (asoc, cmd->obj.msg);break ; +case SCTP_CMD_SEND_NEXT_ASCONF : +sctp_cmd_send_asconf (asoc); +break ;default :printk (KERN_WARNING "Impossible command: %u, %p\n" , cmd->verb, cmd->obj.ptr);
net/sctp/sm_statefuns.c +7 -1
@@ -3670,8 +3670,14 @@ sctp_disposition_t sctp_sf_do_asconf_ack(const struct sctp_endpoint *ep, SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO));if (!sctp_process_asconf_ack ((struct sctp_association *)asoc, - asconf_ack)) + asconf_ack)) { +/* Successfully processed ASCONF_ACK. We can +* release the next asconf if we have one. +*/ +sctp_add_cmd_sf (commands,SCTP_CMD_SEND_NEXT_ASCONF , +SCTP_NULL ());return SCTP_DISPOSITION_CONSUME ; + } abort =sctp_make_abort (asoc, asconf_ack,sizeof (sctp_errhdr_t));
Makefile line 4
Quoted 10 lines · Greg KH
Makefile +1
-1@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 -EXTRAVERSION = .31 +EXTRAVERSION = .32
In the email subject, you meant to say "Linux 2.6.32.32"...
-Erik
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
Quoted 13 lines · Erik Andersen
Makefile line 4
Quoted 10 lines · Greg KH
Makefile +1
-1@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 32 -EXTRAVERSION = .31 +EXTRAVERSION = .32In the email subject, you meant to say "Linux 2.6.32.32"...
So I did, sorry.
greg k-h