Linux 2.6.27.3
Subsystems (18)
We (the -stable team) are announcing the release of the 2.6.27.3 kernel.
It contains a wide range of bugfixes, and all users of the 2.6.27 kernel series are strongly encouraged to upgrade.
I'll also be replying to this message with a copy of the patch between 2.6.27.2 and 2.6.27.3
The updated 2.6.27.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.27.y.git
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.27.y.git;a=summarythanks,
greg k-h
------------
Documentation/video4linux/CARDLIST.au0828 | 2 Makefile | 4 - drivers/base/core.c | 25 ++++++-- drivers/gpu/drm/i915/i915_dma.c | 2 drivers/md/md.c | 6 -- drivers/media/dvb/siano/sms-cards.c | 4 + drivers/media/video/au0828/au0828-cards.c | 3 + drivers/media/video/tvaudio.c | 2 drivers/net/wireless/ath9k/core.h | 2 drivers/net/wireless/ath9k/main.c | 8 ++ drivers/usb/core/hcd.c | 4 + drivers/usb/core/hcd.h | 6 ++ drivers/usb/gadget/s3c2410_udc.c | 2 drivers/usb/gadget/u_ether.c | 7 ++ drivers/usb/host/ehci-hcd.c | 15 ++++- drivers/usb/host/ohci-hcd.c | 3 + drivers/usb/host/ohci-hub.c | 87 +++++++++++++++++------------- drivers/usb/host/uhci-hcd.c | 3 + drivers/usb/musb/Kconfig | 4 - drivers/usb/musb/cppi_dma.h | 4 - drivers/usb/musb/davinci.c | 20 +----- drivers/usb/musb/musb_core.c | 8 +- drivers/usb/musb/musb_host.c | 6 +- drivers/video/console/fbcon.c | 4 - fs/xfs/linux-2.6/xfs_super.c | 2 kernel/module.c | 2 net/mac80211/wext.c | 2 27 files changed, 148 insertions(+), 89 deletions(-)
Alan Stern (3):
OHCI: Allow broken controllers to auto-stop
USB: OHCI: fix endless polling behavior
USB: EHCI: log a warning if ehci-hcd is not loaded first
Alexey Dobriyan (1):
modules: fix module "notes" kobject leak
Arjan van de Ven (1):
security: avoid calling a NULL function pointer in drivers/video/tvaudio.c
Chris Webb (1):
md: Fix rdev_size_store with size == 0
Christoph Hellwig (1):
xfs: fix remount rw with unrecognized options
Cornelia Huck (2):
Driver core: Fix cleanup in device_create_vargs(). Driver core: Clarify device cleanup.
David Brownell (2):
usb gadget: cdc ethernet notification bugfix
usb: musb_hdrc build fixes
Greg Kroah-Hartman (1):
Linux 2.6.27.3
Johannes Berg (1):
ath9k/mac80211: disallow fragmentation in ath9k, report to userspace
Luis R. Rodriguez (1):
ath9k: fix oops on trying to hold the wrong spinlock
Matthias Hopf (1):
drm/i915: fix ioremap of a user address for non-root (CVE-2008-3831)
Michael Krufky (2):
DVB: au0828: add support for another USB id for Hauppauge HVR950Q
DVB: sms1xxx: support two new revisions of the Hauppauge WinTV MiniStick
Oleg Nesterov (1):
fbcon_set_all_vcs: fix kernel crash when switching the rotated consoles
Yauhen Kharuzhy (1):
USB: Fix s3c2410_udc usb speed handling
Documentation/video4linux/CARDLIST.au0828 +1 -1
@@ -1,5 +1,5 @@ 0 -> Unknown board (au0828) - 1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721f,2040:7280,0fd9:0008] + 1 -> Hauppauge HVR950Q (au0828) [2040:7200,2040:7210,2040:7217,2040:721b,2040:721e,2040:721f,2040:7280,0fd9:0008] 2 -> Hauppauge HVR850 (au0828) [2040:7240] 3 -> DViCO FusionHDTV USB (au0828) [0fe9:d620] 4 -> Hauppauge HVR950Q rev xxF8 (au0828) [2040:7201,2040:7211,2040:7281]
Makefile +2 -2
@@ -1,8 +1,8 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 27 -EXTRAVERSION = .2 -NAME = Rotary Wombat +EXTRAVERSION = .3 +NAME = Trembling Tortoise # *DOCUMENTATION* # To see a list of typical targets execute "make help"
drivers/base/core.c +19 -6
@@ -523,11 +523,16 @@ static void klist_children_put(struct klist_node *n)* device_initialize - init device structure. * @dev: device. * -* This prepares the device for use by other layers, -* including adding it to the device hierarchy. +* This prepares the device for use by other layers by initializing +* its fields. * It is the first half of device_register(), if called by -* that, though it can also be called separately, so one -* may use @dev's fields (e.g. the refcount). +* that function, though it can also be called separately, so one +* may use @dev's fields. In particular, get_device()/put_device() +* may be used for reference counting of @dev after calling this +* function. +* +* NOTE: Use put_device() to give up your reference instead of freeing +* @dev directly once you have called this function. */ void device_initialize (struct device *dev) {
@@ -836,9 +841,13 @@ static void device_remove_sys_dev_entry(struct device *dev)* This is part 2 of device_register(), though may be called * separately _iff_ device_initialize() has been called separately. * -* This adds it to the kobject hierarchy via kobject_add(), adds it +* This adds @dev to the kobject hierarchy via kobject_add(), adds it * to the global and sibling lists for the device, then * adds it to the other relevant subsystems of the driver model. +* +* NOTE: _Never_ directly free @dev after calling this function, even +* if it returned an error! Always use put_device() to give up your +* reference instead. */ int device_add (struct device *dev) {
@@ -965,6 +974,10 @@ done:* I.e. you should only call the two helpers separately if * have a clearly defined need to use and refcount the device * before it is added to the hierarchy. +* +* NOTE: _Never_ directly free @dev after calling this function, even +* if it returned an error! Always use put_device() to give up the +* reference initialized in this function instead. */ int device_register (struct device *dev) {
@@ -1243,7 +1256,7 @@ struct device *device_create_vargs(struct class *class, struct device *parent,return dev; error: -kfree (dev); +put_device (dev);return ERR_PTR (retval); }EXPORT_SYMBOL_GPL (device_create_vargs);
drivers/gpu/drm/i915/i915_dma.c +1 -1
@@ -836,7 +836,7 @@ struct drm_ioctl_desc i915_ioctls[] = {DRM_IOCTL_DEF (DRM_I915_SET_VBLANK_PIPE , i915_vblank_pipe_set,DRM_AUTH |DRM_MASTER |DRM_ROOT_ONLY ),DRM_IOCTL_DEF (DRM_I915_GET_VBLANK_PIPE , i915_vblank_pipe_get,DRM_AUTH ),DRM_IOCTL_DEF (DRM_I915_VBLANK_SWAP , i915_vblank_swap,DRM_AUTH ), - DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH), + DRM_IOCTL_DEF(DRM_I915_HWS_ADDR, i915_set_status_page, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), };int i915_max_ioctl =DRM_ARRAY_SIZE (i915_ioctls);
drivers/md/md.c +2 -4
@@ -2109,8 +2109,6 @@ rdev_size_store(mdk_rdev_t *rdev, const char *buf, size_t len)if (strict_strtoull (buf,10 , &size) <0 )return -EINVAL ; -if (size < my_mddev->size) -return -EINVAL ;if (my_mddev->pers && rdev->raid_disk >=0 ) {if (my_mddev->persistent) { size = super_types[my_mddev->major_version].
@@ -2121,9 +2119,9 @@ rdev_size_store(mdk_rdev_t *rdev, const char *buf, size_t len) size = (rdev->bdev->bd_inode->i_size >>10 ); size -= rdev->data_offset/2 ; } -if (size < my_mddev->size) -return -EINVAL ;/* component must fit device */ } +if (size < my_mddev->size) +return -EINVAL ;/* component must fit device */ rdev->size = size;if (size > oldsize && my_mddev->external) {
drivers/media/dvb/siano/sms-cards.c +4 -0
@@ -42,6 +42,10 @@ struct usb_device_id smsusb_id_table[] = { .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0x5510), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0x5520), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, + { USB_DEVICE(0x2040, 0x5530), + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0x5580), .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, { USB_DEVICE(0x2040, 0x5590),
drivers/media/video/au0828/au0828-cards.c +3 -0
@@ -90,6 +90,7 @@ static void hauppauge_eeprom(struct au0828_dev *dev, u8 *eeprom_data)case 72221 :/* WinTV-HVR950q (OEM, IR, ATSC/QAM and basic analog video */ case 72231 :/* WinTV-HVR950q (OEM, IR, ATSC/QAM and basic analog video */ case 72241 :/* WinTV-HVR950q (OEM, No IR, ATSC/QAM and basic analog video */ +case 72251 :/* WinTV-HVR950q (Retail, IR, ATSC/QAM and basic analog video */ case 72301 :/* WinTV-HVR850 (Retail, IR, ATSC and basic analog video */ case 72500 :/* WinTV-HVR950q (OEM, No IR, ATSC/QAM */ break ;
@@ -198,6 +199,8 @@ struct usb_device_id au0828_usb_id_table [] = { .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q }, { USB_DEVICE(0x2040, 0x721b), .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q }, + { USB_DEVICE(0x2040, 0x721e), + .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q }, { USB_DEVICE(0x2040, 0x721f), .driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q }, { USB_DEVICE(0x2040, 0x7280),
drivers/media/video/tvaudio.c +1 -1
@@ -1792,7 +1792,7 @@ static int chip_command(struct i2c_client *client,break ;case VIDIOC_S_FREQUENCY : chip->mode =0 ;/* automatic */ -if (desc->checkmode) { +if (desc->checkmode && desc->setmode) { desc->setmode (chip,V4L2_TUNER_MODE_MONO );if (chip->prevmode !=V4L2_TUNER_MODE_MONO ) chip->prevmode =-1 ;/* reset previous mode */
drivers/net/wireless/ath9k/core.h +1 -1
@@ -316,7 +316,7 @@ void ath_descdma_cleanup(struct ath_softc *sc,#define ATH_RX_TIMEOUT 40/* 40 milliseconds */ #define WME_NUM_TID 16#define IEEE80211_BAR_CTL_TID_M 0xF000/* tid mask */ -#define IEEE80211_BAR_CTL_TID_S 2/* tid shift */ +#define IEEE80211_BAR_CTL_TID_S 12/* tid shift */ enum ATH_RX_TYPE {ATH_RX_NON_CONSUMED =0 ,
drivers/net/wireless/ath9k/main.c +7 -1
@@ -1007,6 +1007,11 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,return ret; } +static int ath9k_no_fragmentation (struct ieee80211_hw *hw,u32 value) +{ +return -EOPNOTSUPP ; +} +static struct ieee80211_ops ath9k_ops = { .tx = ath9k_tx, .start = ath9k_start,
@@ -1031,7 +1036,8 @@ static struct ieee80211_ops ath9k_ops = { .get_tsf = ath9k_get_tsf, .reset_tsf = ath9k_reset_tsf, .tx_last_beacon = NULL, - .ampdu_action = ath9k_ampdu_action + .ampdu_action = ath9k_ampdu_action, + .set_frag_threshold = ath9k_no_fragmentation, }; void ath_get_beaconconfig(struct ath_softc *sc,
drivers/usb/core/hcd.c +4 -0
@@ -81,6 +81,10 @@/*-------------------------------------------------------------------------*/ +/* Keep track of which host controller drivers are loaded */ +unsigned long usb_hcds_loaded; +EXPORT_SYMBOL_GPL (usb_hcds_loaded); +/* host controllers we manage */ LIST_HEAD (usb_bus_list);EXPORT_SYMBOL_GPL (usb_bus_list);
drivers/usb/core/hcd.h +6 -0
@@ -482,4 +482,10 @@ static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,*/ extern struct rw_semaphore ehci_cf_port_reset_rwsem; +/* Keep track of which host controller drivers are loaded */ +#define USB_UHCI_LOADED 0 +#define USB_OHCI_LOADED 1 +#define USB_EHCI_LOADED 2 +extern unsigned long usb_hcds_loaded; +#endif /* __KERNEL__ */
drivers/usb/gadget/s3c2410_udc.c +1 -1
@@ -1651,7 +1651,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)return -EBUSY ;if (!driver->bind || !driver->setup - || driver->speed !=USB_SPEED_FULL ) { + || driver->speed <USB_SPEED_FULL ) {printk (KERN_ERR "Invalid driver: bind %p setup %p speed %d\n" , driver->bind, driver->setup, driver->speed);return -EINVAL ;
drivers/usb/gadget/u_ether.c +7 -0
@@ -873,6 +873,13 @@ struct net_device *gether_connect(struct gether *link)spin_lock (&dev->lock); dev->port_usb = link; link->ioport = dev; +if (netif_running (dev->net)) { +if (link->open) + link->open (link); + }else { +if (link->close) + link->close (link); + }spin_unlock (&dev->lock);netif_carrier_on (dev->net);
drivers/usb/host/ehci-hcd.c +13 -2
@@ -1049,6 +1049,12 @@ static int __init ehci_hcd_init(void) {int retval =0 ; +set_bit (USB_EHCI_LOADED , &usb_hcds_loaded); +if (test_bit (USB_UHCI_LOADED , &usb_hcds_loaded) || +test_bit (USB_OHCI_LOADED , &usb_hcds_loaded)) +printk (KERN_WARNING "Warning! ehci_hcd should always be loaded" +" before uhci_hcd and ohci_hcd, not after\n" ); + pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n", hcd_name, sizeof(struct ehci_qh), sizeof(struct ehci_qtd),
@@ -1056,8 +1062,10 @@ static int __init ehci_hcd_init(void)#ifdef DEBUG ehci_debug_root =debugfs_create_dir ("ehci" ,NULL ); -if (!ehci_debug_root) -return -ENOENT ; +if (!ehci_debug_root) { + retval = -ENOENT ; + goto err_debug; + }#endif #ifdef PLATFORM_DRIVER
@@ -1104,7 +1112,9 @@ clean0:#ifdef DEBUG debugfs_remove (ehci_debug_root); ehci_debug_root =NULL ; +err_debug:#endif +clear_bit (USB_EHCI_LOADED , &usb_hcds_loaded);return retval; }module_init (ehci_hcd_init);
@@ -1126,6 +1136,7 @@ static void __exit ehci_hcd_cleanup(void)#ifdef DEBUG debugfs_remove (ehci_debug_root);#endif +clear_bit (USB_EHCI_LOADED , &usb_hcds_loaded); }module_exit (ehci_hcd_cleanup);
drivers/usb/host/ohci-hcd.c +3 -0
@@ -1098,6 +1098,7 @@ static int __init ohci_hcd_mod_init(void)printk (KERN_DEBUG "%s: " DRIVER_INFO "\n" , hcd_name);pr_debug ("%s: block sizes: ed %Zd td %Zd\n" , hcd_name,sizeof (struct ed ),sizeof (struct td )); +set_bit (USB_OHCI_LOADED , &usb_hcds_loaded);#ifdef DEBUG ohci_debug_root =debugfs_create_dir ("ohci" ,NULL );
@@ -1184,6 +1185,7 @@ static int __init ohci_hcd_mod_init(void) error_debug:#endif +clear_bit (USB_OHCI_LOADED , &usb_hcds_loaded);return retval; }module_init (ohci_hcd_mod_init);
@@ -1214,6 +1216,7 @@ static void __exit ohci_hcd_mod_exit(void)#ifdef DEBUG debugfs_remove (ohci_debug_root);#endif +clear_bit (USB_OHCI_LOADED , &usb_hcds_loaded); }module_exit (ohci_hcd_mod_exit);
drivers/usb/host/ohci-hub.c +52 -35
157 lines not on this page · raw message
drivers/usb/host/uhci-hcd.c +3 -0
@@ -953,6 +953,7 @@ static int __init uhci_hcd_init(void) printk(KERN_INFO DRIVER_DESC " " DRIVER_VERSION "%s\n", ignore_oc ? ", overcurrent ignored" : ""); +set_bit (USB_UHCI_LOADED , &usb_hcds_loaded);if (usb_disabled ())return -ENODEV ;
@@ -988,6 +989,7 @@ debug_failed: errbuf_failed: +clear_bit (USB_UHCI_LOADED , &usb_hcds_loaded);return retval; }
@@ -997,6 +999,7 @@ static void __exit uhci_hcd_cleanup(void)kmem_cache_destroy (uhci_up_cachep);debugfs_remove (uhci_debugfs_root);kfree (errbuf); +clear_bit (USB_UHCI_LOADED , &usb_hcds_loaded); }module_init (uhci_hcd_init);
drivers/usb/musb/Kconfig +0 -4
@@ -33,10 +33,6 @@ config USB_MUSB_SOC default y if ARCH_DAVINCI default y if ARCH_OMAP2430 default y if ARCH_OMAP34XX - help - Use a static <asm/arch/hdrc_cnf.h> file to describe how the - controller is configured (endpoints, mechanisms, etc) on the - current iteration of a given system-on-chip. comment "DaVinci 644x USB support" depends on USB_MUSB_HDRC && ARCH_DAVINCI
drivers/usb/musb/cppi_dma.h +2 -2
@@ -119,8 +119,8 @@ struct cppi {void __iomem *mregs;/* Mentor regs */ void __iomem *tibase;/* TI/CPPI regs */ -struct cppi_channel tx[MUSB_C_NUM_EPT -1 ]; -struct cppi_channel rx[MUSB_C_NUM_EPR -1 ]; +struct cppi_channel tx[4 ]; +struct cppi_channel rx[4 ];struct dma_pool *pool;
drivers/usb/musb/davinci.c +4 -16
@@ -30,6 +30,7 @@#include <linux/delay.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/gpio.h> #include <asm/arch/hardware.h> #include <asm/arch/memory.h>
@@ -39,7 +40,7 @@#include "musb_core.h" #ifdef CONFIG_MACH_DAVINCI_EVM -#include <asm/arch/i2c-client.h> +#define GPIO_nVBUS_DRV 87#endif #include "davinci.h"
@@ -138,7 +139,6 @@ static int vbus_state = -1;/* VBUS SWITCHING IS BOARD-SPECIFIC */ #ifdef CONFIG_MACH_DAVINCI_EVM -#ifndef CONFIG_MACH_DAVINCI_EVM_OTG /* I2C operations are always synchronous, and require a task context. * With unloaded systems, using the shared workqueue seems to suffice
@@ -146,12 +146,11 @@ static int vbus_state = -1;*/ static void evm_deferred_drvvbus (struct work_struct *ignored) { -davinci_i2c_expander_op (0x3a ,USB_DRVVBUS , vbus_state); +gpio_set_value_cansleep (GPIO_nVBUS_DRV, vbus_state); vbus_state = !vbus_state; } static DECLARE_WORK(evm_vbus_work, evm_deferred_drvvbus); -#endif /* modified board */ #endif /* EVM */ static void davinci_source_power (struct musb *musb,int is_on,int immediate)
@@ -165,21 +164,10 @@ static void davinci_source_power(struct musb *musb, int is_on, int immediate)#ifdef CONFIG_MACH_DAVINCI_EVM if (machine_is_davinci_evm ()) { -#ifdef CONFIG_MACH_DAVINCI_EVM_OTG -/* modified EVM board switching VBUS with GPIO(6) not I2C -* NOTE: PINMUX0.RGB888 (bit23) must be clear -*/ -if (is_on) -gpio_set (GPIO (6 )); -else -gpio_clear (GPIO (6 )); - immediate =1 ; -#else if (immediate) -davinci_i2c_expander_op (0x3a ,USB_DRVVBUS , !is_on); +gpio_set_value_cansleep (GPIO_nVBUS_DRV, vbus_state);else schedule_work (&evm_vbus_work); -#endif }#endif if (immediate)
drivers/usb/musb/musb_core.c +4 -4
@@ -82,9 +82,9 @@/* * This gets many kinds of configuration information: * - Kconfig for everything user-configurable -* - <asm/arch/hdrc_cnf.h> for SOC or family details * - platform_device for addressing, irq, and platform_data * - platform_data is mostly for board-specific informarion +* (plus recentrly, SOC or family details) * * Most of the conditional compilation will (someday) vanish. */
@@ -974,9 +974,9 @@ static void musb_shutdown(struct platform_device *pdev)/* * The silicon either has hard-wired endpoint configurations, or else * "dynamic fifo" sizing. The driver has support for both, though at this -* writing only the dynamic sizing is very well tested. We use normal -* idioms to so both modes are compile-tested, but dead code elimination -* leaves only the relevant one in the object file. +* writing only the dynamic sizing is very well tested. Since we switched +* away from compile-time hardware parameters, we can no longer rely on +* dead code elimination to leave only the relevant one in the object file. * * We don't currently use dynamic fifo setup capability to do anything * more than selecting one of a bunch of predefined configurations.
drivers/usb/musb/musb_host.c +3 -3
@@ -108,7 +108,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum,/* * Clear TX fifo. Needed to avoid BABBLE errors. */ -static inline void musb_h_tx_flush_fifo (struct musb_hw_ep *ep) +static void musb_h_tx_flush_fifo (struct musb_hw_ep *ep) {void __iomem *epio = ep->regs;u16 csr;
@@ -436,7 +436,7 @@ musb_advance_schedule(struct musb *musb, struct urb *urb, } } -static inline u16 musb_h_flush_rxfifo (struct musb_hw_ep *hw_ep,u16 csr) +static u16 musb_h_flush_rxfifo (struct musb_hw_ep *hw_ep,u16 csr) {/* we don't want fifo to fill itself again; * ignore dma (various models),
@@ -1005,7 +1005,7 @@ static bool musb_h_ep0_continue(struct musb *musb, u16 len, struct urb *urb)/* * Handle default endpoint interrupt as host. Only called in IRQ time -* from the LinuxIsr() interrupt service routine. +* from musb_interrupt(). * * called with controller irqlocked */
drivers/video/console/fbcon.c +2 -2
@@ -2996,8 +2996,8 @@ static void fbcon_set_all_vcs(struct fb_info *info) p = &fb_display[vc->vc_num];set_blitting_type (vc, info);var_to_display (p, &info->var, info); - cols =FBCON_SWAP (p->rotate, info->var.xres, info->var.yres); - rows =FBCON_SWAP (p->rotate, info->var.yres, info->var.xres); + cols =FBCON_SWAP (ops->rotate, info->var.xres, info->var.yres); + rows =FBCON_SWAP (ops->rotate, info->var.yres, info->var.xres); cols /= vc->vc_font.width; rows /= vc->vc_font.height;vc_resize (vc, cols, rows);
fs/xfs/linux-2.6/xfs_super.c +1 -1
@@ -1323,7 +1323,7 @@ xfs_fs_remount( "XFS: mount option \"%s\" not supported for remount\n", p);return -EINVAL ;#else -return 0 ; +break ;#endif } }
kernel/module.c +1 -1
@@ -1173,7 +1173,7 @@ static void free_notes_attrs(struct module_notes_attrs *notes_attrs,while (i-- >0 )sysfs_remove_bin_file (notes_attrs->dir, ¬es_attrs->attrs[i]); -kobject_del (notes_attrs->dir); +kobject_put (notes_attrs->dir); }kfree (notes_attrs); }
net/mac80211/wext.c +1 -1
@@ -804,7 +804,7 @@ static int ieee80211_ioctl_siwfrag(struct net_device *dev,* configure it here */ if (local->ops->set_frag_threshold) - local->ops->set_frag_threshold ( +return local->ops->set_frag_threshold (local_to_hw (local), local->fragmentation_threshold);