···11config VIDEO_SAA713422 tristate "Philips SAA7134 support"33- depends on VIDEO_DEV && PCI && I2C && SOUND && SND33+ depends on VIDEO_DEV && PCI && I2C44 select VIDEO_BUF55 select VIDEO_IR66 select VIDEO_TUNER77 select CRC3288- select SND_PCM_OSS98 ---help---109 This is a video4linux driver for Philips SAA713x based1110 TV cards.12111312 To compile this driver as a module, choose M here: the1413 module will be called saa7134.1414+1515+config VIDEO_SAA7134_ALSA1616+ tristate "Philips SAA7134 DMA audio support"1717+ depends on VIDEO_SAA7134 && SOUND && SND && (!VIDEO_SAA7134_OSS || VIDEO_SAA7134_OSS = m)1818+ select SND_PCM_OSS1919+ ---help---2020+ This is a video4linux driver for direct (DMA) audio in2121+ Philips SAA713x based TV cards using ALSA2222+2323+ To compile this driver as a module, choose M here: the2424+ module will be called saa7134-alsa.2525+2626+config VIDEO_SAA7134_OSS2727+ tristate "Philips SAA7134 DMA audio support (OSS, DEPRECATED)"2828+ depends on VIDEO_SAA7134 && SOUND_PRIME && (!VIDEO_SAA7134_ALSA || VIDEO_SAA7134_ALSA = m)2929+ ---help---3030+ This is a video4linux driver for direct (DMA) audio in3131+ Philips SAA713x based TV cards using OSS3232+3333+ This is deprecated in favor of the ALSA module3434+3535+ To compile this driver as a module, choose M here: the3636+ module will be called saa7134-oss.15371638config VIDEO_SAA7134_DVB1739 tristate "DVB/ATSC Support for saa7134 based TV cards"
···989989 struct saa7134_dev *dev = NULL;990990 struct list_head *list;991991992992+ if (!dmasound_init && !dmasound_exit) {993993+ dmasound_init = alsa_device_init;994994+ dmasound_exit = alsa_device_exit;995995+ } else {996996+ printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n");997997+ return -EBUSY;998998+ }999999+9921000 printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n");99310019941002 list_for_each(list,&saa7134_devlist) {···10081000 return -EBUSY;10091001 }10101002 }10111011-10121012- dmasound_init = alsa_device_init;10131013- dmasound_exit = alsa_device_exit;1014100310151004 if (dev == NULL)10161005 printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");···10281023 snd_card_free(snd_saa7134_cards[idx]);10291024 }1030102510261026+ dmasound_init = NULL;10271027+ dmasound_exit = NULL;10311028 printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");1032102910331030 return;10341031}1035103210361036-module_init(saa7134_alsa_init);10331033+/* We initialize this late, to make sure the sound system is up and running */10341034+late_initcall(saa7134_alsa_init);10371035module_exit(saa7134_alsa_exit);10381036MODULE_LICENSE("GPL");10391037MODULE_AUTHOR("Ricardo Cerqueira");
+14-4
drivers/media/video/saa7134/saa7134-oss.c
···959959 struct saa7134_dev *dev = NULL;960960 struct list_head *list;961961962962+ if (!dmasound_init && !dmasound_exit) {963963+ dmasound_init = oss_device_init;964964+ dmasound_exit = oss_device_exit;965965+ } else {966966+ printk(KERN_WARNING "saa7134 OSS: can't load, DMA sound handler already assigned (probably to ALSA)\n");967967+ return -EBUSY;968968+ }969969+962970 printk(KERN_INFO "saa7134 OSS driver for DMA sound loaded\n");971971+963972964973 list_for_each(list,&saa7134_devlist) {965974 dev = list_entry(list, struct saa7134_dev, devlist);···982973983974 if (dev == NULL)984975 printk(KERN_INFO "saa7134 OSS: no saa7134 cards found\n");985985-986986- dmasound_init = oss_device_init;987987- dmasound_exit = oss_device_exit;988976989977 return 0;990978···10039971004998 }100599910001000+ dmasound_init = NULL;10011001+ dmasound_exit = NULL;10021002+10061003 printk(KERN_INFO "saa7134 OSS driver for DMA sound unloaded\n");1007100410081005 return;10091006}1010100710111011-module_init(saa7134_oss_init);10081008+/* We initialize this late, to make sure the sound system is up and running */10091009+late_initcall(saa7134_oss_init);10121010module_exit(saa7134_oss_exit);10131011MODULE_LICENSE("GPL");10141012MODULE_AUTHOR("Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]");
+38-10
drivers/scsi/scsi_scan.c
···400400 return found_target;401401}402402403403+struct work_queue_wrapper {404404+ struct work_struct work;405405+ struct scsi_target *starget;406406+};407407+408408+static void scsi_target_reap_work(void *data) {409409+ struct work_queue_wrapper *wqw = (struct work_queue_wrapper *)data;410410+ struct scsi_target *starget = wqw->starget;411411+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);412412+ unsigned long flags;413413+414414+ kfree(wqw);415415+416416+ spin_lock_irqsave(shost->host_lock, flags);417417+418418+ if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {419419+ list_del_init(&starget->siblings);420420+ spin_unlock_irqrestore(shost->host_lock, flags);421421+ device_del(&starget->dev);422422+ transport_unregister_device(&starget->dev);423423+ put_device(&starget->dev);424424+ return;425425+426426+ }427427+ spin_unlock_irqrestore(shost->host_lock, flags);428428+429429+ return;430430+}431431+403432/**404433 * scsi_target_reap - check to see if target is in use and destroy if not405434 *···440411 */441412void scsi_target_reap(struct scsi_target *starget)442413{443443- struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);444444- unsigned long flags;445445- spin_lock_irqsave(shost->host_lock, flags);414414+ struct work_queue_wrapper *wqw = 415415+ kzalloc(sizeof(struct work_queue_wrapper), GFP_ATOMIC);446416447447- if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {448448- list_del_init(&starget->siblings);449449- spin_unlock_irqrestore(shost->host_lock, flags);450450- device_del(&starget->dev);451451- transport_unregister_device(&starget->dev);452452- put_device(&starget->dev);417417+ if (!wqw) {418418+ starget_printk(KERN_ERR, starget,419419+ "Failed to allocate memory in scsi_reap_target()\n");453420 return;454421 }455455- spin_unlock_irqrestore(shost->host_lock, flags);422422+423423+ INIT_WORK(&wqw->work, scsi_target_reap_work, wqw);424424+ wqw->starget = starget;425425+ schedule_work(&wqw->work);456426}457427458428/**
+55-4
drivers/scsi/scsi_transport_fc.c
···105105 { FC_PORTSTATE_LINKDOWN, "Linkdown" },106106 { FC_PORTSTATE_ERROR, "Error" },107107 { FC_PORTSTATE_LOOPBACK, "Loopback" },108108+ { FC_PORTSTATE_DELETED, "Deleted" },108109};109110fc_enum_name_search(port_state, fc_port_state, fc_port_state_names)110111#define FC_PORTSTATE_MAX_NAMELEN 20···212211#define FC_MGMTSRVR_PORTID 0x00000a213212214213214214+static void fc_shost_remove_rports(void *data);215215static void fc_timeout_deleted_rport(void *data);216216static void fc_scsi_scan_rport(void *data);217217static void fc_rport_terminate(struct fc_rport *rport);···320318 fc_host_next_rport_number(shost) = 0;321319 fc_host_next_target_id(shost) = 0;322320321321+ fc_host_flags(shost) = 0;322322+ INIT_WORK(&fc_host_rport_del_work(shost), fc_shost_remove_rports, shost);323323 return 0;324324}325325···391387 struct fc_internal *i = to_fc_internal(shost->transportt); \392388 if ((i->f->get_rport_##field) && \393389 !((rport->port_state == FC_PORTSTATE_BLOCKED) || \390390+ (rport->port_state == FC_PORTSTATE_DELETED) || \394391 (rport->port_state == FC_PORTSTATE_NOTPRESENT))) \395392 i->f->get_rport_##field(rport); \396393 return snprintf(buf, sz, format_string, cast rport->field); \···407402 struct Scsi_Host *shost = rport_to_shost(rport); \408403 struct fc_internal *i = to_fc_internal(shost->transportt); \409404 if ((rport->port_state == FC_PORTSTATE_BLOCKED) || \405405+ (rport->port_state == FC_PORTSTATE_DELETED) || \410406 (rport->port_state == FC_PORTSTATE_NOTPRESENT)) \411407 return -EBUSY; \412408 val = simple_strtoul(buf, NULL, 0); \···525519 struct Scsi_Host *shost = rport_to_shost(rport);526520 struct fc_internal *i = to_fc_internal(shost->transportt);527521 if ((rport->port_state == FC_PORTSTATE_BLOCKED) ||522522+ (rport->port_state == FC_PORTSTATE_DELETED) ||528523 (rport->port_state == FC_PORTSTATE_NOTPRESENT))529524 return -EBUSY;530525 val = simple_strtoul(buf, NULL, 0);···17761769 rport->maxframe_size = -1;17771770 rport->supported_classes = FC_COS_UNSPECIFIED;17781771 rport->roles = FC_RPORT_ROLE_UNKNOWN;17791779- rport->port_state = FC_PORTSTATE_NOTPRESENT;17721772+ rport->port_state = FC_PORTSTATE_DELETED;1780177317811774 /* remove the identifiers that aren't used in the consisting binding */17821775 switch (fc_host_tgtid_bind_type(shost)) {···17961789 break;17971790 }1798179117991799- spin_unlock_irqrestore(shost->host_lock, flags);18001800-18011792 /*18021793 * As this only occurs if the remote port (scsi target)18031794 * went away and didn't come back - we'll remove18041795 * all attached scsi devices.17961796+ *17971797+ * We'll schedule the shost work item to perform the actual removal17981798+ * to avoid recursion in the different flush calls if we perform17991799+ * the removal in each target - and there are lots of targets18001800+ * whose timeouts fire at the same time.18051801 */18061806- fc_rport_tgt_remove(rport);18021802+18031803+ if ( !(fc_host_flags(shost) & FC_SHOST_RPORT_DEL_SCHEDULED)) {18041804+ fc_host_flags(shost) |= FC_SHOST_RPORT_DEL_SCHEDULED;18051805+ scsi_queue_work(shost, &fc_host_rport_del_work(shost));18061806+ }18071807+18081808+ spin_unlock_irqrestore(shost->host_lock, flags);18071809}1808181018091811/**···18311815 scsi_target_unblock(&rport->dev);18321816 scsi_scan_target(&rport->dev, rport->channel, rport->scsi_target_id,18331817 SCAN_WILD_CARD, 1);18181818+}18191819+18201820+18211821+/**18221822+ * fc_shost_remove_rports - called to remove all rports that are marked18231823+ * as in a deleted (not connected) state.18241824+ * 18251825+ * @data: shost whose rports are to be looked at18261826+ **/18271827+static void18281828+fc_shost_remove_rports(void *data)18291829+{18301830+ struct Scsi_Host *shost = (struct Scsi_Host *)data;18311831+ struct fc_rport *rport, *next_rport;18321832+ unsigned long flags;18331833+18341834+ spin_lock_irqsave(shost->host_lock, flags);18351835+ while (fc_host_flags(shost) & FC_SHOST_RPORT_DEL_SCHEDULED) {18361836+18371837+ fc_host_flags(shost) &= ~FC_SHOST_RPORT_DEL_SCHEDULED;18381838+18391839+restart_search:18401840+ list_for_each_entry_safe(rport, next_rport,18411841+ &fc_host_rport_bindings(shost), peers) {18421842+ if (rport->port_state == FC_PORTSTATE_DELETED) {18431843+ rport->port_state = FC_PORTSTATE_NOTPRESENT;18441844+ spin_unlock_irqrestore(shost->host_lock, flags);18451845+ fc_rport_tgt_remove(rport);18461846+ spin_lock_irqsave(shost->host_lock, flags);18471847+ goto restart_search;18481848+ }18491849+ }18501850+18511851+ }18521852+ spin_unlock_irqrestore(shost->host_lock, flags);18341853}1835185418361855
+6-3
drivers/usb/core/usb.c
···14321432 mark_quiesced(intf);14331433 } else {14341434 // FIXME else if there's no suspend method, disconnect...14351435- dev_warn(dev, "no %s?\n", "suspend");14351435+ dev_warn(dev, "no suspend for driver %s?\n", driver->name);14361436+ mark_quiesced(intf);14361437 status = 0;14371438 }14381439 return status;···14611460 }1462146114631462 if ((dev->driver == NULL) ||14641464- (dev->driver_data == &usb_generic_driver_data))14631463+ (dev->driver_data == &usb_generic_driver_data)) {14641464+ dev->power.power_state.event = PM_EVENT_FREEZE;14651465 return 0;14661466+ }1466146714671468 intf = to_usb_interface(dev);14681469 driver = to_usb_driver(dev->driver);···14841481 mark_quiesced(intf);14851482 }14861483 } else14871487- dev_warn(dev, "no %s?\n", "resume");14841484+ dev_warn(dev, "no resume for driver %s?\n", driver->name);14881485 return 0;14891486}14901487
+2-2
drivers/usb/storage/scsiglue.c
···109109 * data comes from.110110 */111111 if (sdev->scsi_level < SCSI_2)112112- sdev->scsi_level = SCSI_2;112112+ sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;113113114114 /* According to the technical support people at Genesys Logic,115115 * devices using their chips have problems transferring more than···162162 * a Get-Max-LUN request, we won't lose much by setting the163163 * revision level down to 2. The only devices that would be164164 * affected are those with sparse LUNs. */165165- sdev->scsi_level = SCSI_2;165165+ sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;166166167167 /* USB-IDE bridges tend to report SK = 0x04 (Non-recoverable168168 * Hardware Error) when any low-level error occurs,
+2-1
fs/nfs/file.c
···509509 return -EINVAL;510510511511 /* No mandatory locks over NFS */512512- if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)512512+ if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID &&513513+ fl->fl_type != F_UNLCK)513514 return -ENOLCK;514515515516 if (IS_GETLK(cmd))
+1
include/linux/ipv6_route.h
···1818 fallback, no routers on link */1919#define RTF_ADDRCONF 0x00040000 /* addrconf route - RA */2020#define RTF_PREFIX_RT 0x00080000 /* A prefix only route - RA */2121+#define RTF_ANYCAST 0x00100000 /* Anycast */21222223#define RTF_NONEXTHOP 0x00200000 /* route with no nexthop */2324#define RTF_EXPIRES 0x00400000
···7979 FC_PORTSTATE_LINKDOWN,8080 FC_PORTSTATE_ERROR,8181 FC_PORTSTATE_LOOPBACK,8282+ FC_PORTSTATE_DELETED,8283};83848485···326325 struct list_head rport_bindings;327326 u32 next_rport_number;328327 u32 next_target_id;328328+ u8 flags;329329+ struct work_struct rport_del_work;329330};331331+332332+/* values for struct fc_host_attrs "flags" field: */333333+#define FC_SHOST_RPORT_DEL_SCHEDULED 0x01334334+330335331336#define fc_host_node_name(x) \332337 (((struct fc_host_attrs *)(x)->shost_data)->node_name)···372365 (((struct fc_host_attrs *)(x)->shost_data)->next_rport_number)373366#define fc_host_next_target_id(x) \374367 (((struct fc_host_attrs *)(x)->shost_data)->next_target_id)368368+#define fc_host_flags(x) \369369+ (((struct fc_host_attrs *)(x)->shost_data)->flags)370370+#define fc_host_rport_del_work(x) \371371+ (((struct fc_host_attrs *)(x)->shost_data)->rport_del_work)375372376373377374/* The functions by which the transport class and the driver communicate */
+5-1
net/8021q/vlan.c
···753753 break;754754 case GET_VLAN_REALDEV_NAME_CMD:755755 err = vlan_dev_get_realdev_name(args.device1, args.u.device2);756756+ if (err)757757+ goto out;756758 if (copy_to_user(arg, &args,757759 sizeof(struct vlan_ioctl_args))) {758760 err = -EFAULT;···763761764762 case GET_VLAN_VID_CMD:765763 err = vlan_dev_get_vid(args.device1, &vid);764764+ if (err)765765+ goto out;766766 args.u.VID = vid;767767 if (copy_to_user(arg, &args,768768 sizeof(struct vlan_ioctl_args))) {···778774 __FUNCTION__, args.cmd);779775 return -EINVAL;780776 };781781-777777+out:782778 return err;783779}784780
+1-1
net/dccp/ipv4.c
···12511251 struct dccp_sock *dp = dccp_sk(sk);1252125212531253 /*12541254- * DCCP doesn't use sk_qrite_queue, just sk_send_head12541254+ * DCCP doesn't use sk_write_queue, just sk_send_head12551255 * for retransmissions12561256 */12571257 if (sk->sk_send_head != NULL) {
+98-13
net/ipv6/addrconf.c
···137137static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags);138138static void addrconf_dad_timer(unsigned long data);139139static void addrconf_dad_completed(struct inet6_ifaddr *ifp);140140+static void addrconf_dad_run(struct inet6_dev *idev);140141static void addrconf_rs_timer(unsigned long data);141142static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);142143static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);···389388 }390389#endif391390391391+ if (netif_carrier_ok(dev))392392+ ndev->if_flags |= IF_READY;393393+392394 write_lock_bh(&addrconf_lock);393395 dev->ip6_ptr = ndev;394396 write_unlock_bh(&addrconf_lock);···419415 if ((idev = ipv6_add_dev(dev)) == NULL)420416 return NULL;421417 }418418+422419 if (dev->flags&IFF_UP)423420 ipv6_mc_up(idev);424421 return idev;···639634 }640635#endif641636642642- for (ifap = &idev->addr_list; (ifa=*ifap) != NULL;643643- ifap = &ifa->if_next) {637637+ for (ifap = &idev->addr_list; (ifa=*ifap) != NULL;) {644638 if (ifa == ifp) {645639 *ifap = ifa->if_next;646640 __in6_ifa_put(ifp);···647643 if (!(ifp->flags & IFA_F_PERMANENT) || onlink > 0)648644 break;649645 deleted = 1;646646+ continue;650647 } else if (ifp->flags & IFA_F_PERMANENT) {651648 if (ipv6_prefix_equal(&ifa->addr, &ifp->addr,652649 ifp->prefix_len)) {···671666 }672667 }673668 }669669+ ifap = &ifa->if_next;674670 }675671 write_unlock_bh(&idev->lock);676672···909903910904 score.addr_type = __ipv6_addr_type(&ifa->addr);911905912912- /* Rule 0: Candidate Source Address (section 4)906906+ /* Rule 0:907907+ * - Tentative Address (RFC2462 section 5.4)908908+ * - A tentative address is not considered909909+ * "assigned to an interface" in the traditional910910+ * sense.911911+ * - Candidate Source Address (section 4)913912 * - In any case, anycast addresses, multicast914913 * addresses, and the unspecified address MUST915914 * NOT be included in a candidate set.916915 */916916+ if (ifa->flags & IFA_F_TENTATIVE)917917+ continue;917918 if (unlikely(score.addr_type == IPV6_ADDR_ANY ||918919 score.addr_type & IPV6_ADDR_MULTICAST)) {919920 LIMIT_NETDEBUG(KERN_DEBUG···1228121512291216/* Gets referenced address, destroys ifaddr */1230121712311231-void addrconf_dad_failure(struct inet6_ifaddr *ifp)12181218+void addrconf_dad_stop(struct inet6_ifaddr *ifp)12321219{12331233- if (net_ratelimit())12341234- printk(KERN_INFO "%s: duplicate address detected!\n", ifp->idev->dev->name);12351220 if (ifp->flags&IFA_F_PERMANENT) {12361221 spin_lock_bh(&ifp->lock);12371222 addrconf_del_timer(ifp);···12551244 ipv6_del_addr(ifp);12561245}1257124612471247+void addrconf_dad_failure(struct inet6_ifaddr *ifp)12481248+{12491249+ if (net_ratelimit())12501250+ printk(KERN_INFO "%s: duplicate address detected!\n", ifp->idev->dev->name);12511251+ addrconf_dad_stop(ifp);12521252+}1258125312591254/* Join to solicited addr multicast group. */12601255···21502133{21512134 struct net_device *dev = (struct net_device *) data;21522135 struct inet6_dev *idev = __in6_dev_get(dev);21362136+ int run_pending = 0;2153213721542138 switch(event) {21552139 case NETDEV_UP:21402140+ case NETDEV_CHANGE:21412141+ if (event == NETDEV_UP) {21422142+ if (!netif_carrier_ok(dev)) {21432143+ /* device is not ready yet. */21442144+ printk(KERN_INFO21452145+ "ADDRCONF(NETDEV_UP): %s: "21462146+ "link is not ready\n",21472147+ dev->name);21482148+ break;21492149+ }21502150+ } else {21512151+ if (!netif_carrier_ok(dev)) {21522152+ /* device is still not ready. */21532153+ break;21542154+ }21552155+21562156+ if (idev) {21572157+ if (idev->if_flags & IF_READY) {21582158+ /* device is already configured. */21592159+ break;21602160+ }21612161+ idev->if_flags |= IF_READY;21622162+ }21632163+21642164+ printk(KERN_INFO21652165+ "ADDRCONF(NETDEV_CHANGE): %s: "21662166+ "link becomes ready\n",21672167+ dev->name);21682168+21692169+ run_pending = 1;21702170+ }21712171+21562172 switch(dev->type) {21572173 case ARPHRD_SIT:21582174 addrconf_sit_config(dev);···22022152 break;22032153 };22042154 if (idev) {21552155+ if (run_pending)21562156+ addrconf_dad_run(idev);21572157+22052158 /* If the MTU changed during the interface down, when the22062159 interface up, the changed MTU must be reflected in the22072160 idev as well as routers.···22392186 */22402187 addrconf_ifdown(dev, event != NETDEV_DOWN);22412188 break;22422242- case NETDEV_CHANGE:22432243- break;21892189+22442190 case NETDEV_CHANGENAME:22452191#ifdef CONFIG_SYSCTL22462192 if (idev) {···2320226823212269 /* Step 3: clear flags for stateless addrconf */23222270 if (how != 1)23232323- idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD);22712271+ idev->if_flags &= ~(IF_RS_SENT|IF_RA_RCVD|IF_READY);2324227223252273 /* Step 4: clear address list */23262274#ifdef CONFIG_IPV6_PRIVACY···24292377/*24302378 * Duplicate Address Detection24312379 */23802380+static void addrconf_dad_kick(struct inet6_ifaddr *ifp)23812381+{23822382+ unsigned long rand_num;23832383+ struct inet6_dev *idev = ifp->idev;23842384+23852385+ rand_num = net_random() % (idev->cnf.rtr_solicit_delay ? : 1);23862386+ ifp->probes = idev->cnf.dad_transmits;23872387+ addrconf_mod_timer(ifp, AC_DAD, rand_num);23882388+}23892389+24322390static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)24332391{24342392 struct inet6_dev *idev = ifp->idev;24352393 struct net_device *dev = idev->dev;24362436- unsigned long rand_num;2437239424382395 addrconf_join_solict(dev, &ifp->addr);24392396···24512390 flags);2452239124532392 net_srandom(ifp->addr.s6_addr32[3]);24542454- rand_num = net_random() % (idev->cnf.rtr_solicit_delay ? : 1);2455239324562394 read_lock_bh(&idev->lock);24572395 if (ifp->dead)···24672407 return;24682408 }2469240924702470- ifp->probes = idev->cnf.dad_transmits;24712471- addrconf_mod_timer(ifp, AC_DAD, rand_num);24102410+ if (idev->if_flags & IF_READY)24112411+ addrconf_dad_kick(ifp);24122412+ else {24132413+ /*24142414+ * If the defice is not ready:24152415+ * - keep it tentative if it is a permanent address.24162416+ * - otherwise, kill it.24172417+ */24182418+ in6_ifa_hold(ifp);24192419+ addrconf_dad_stop(ifp);24202420+ }2472242124732422 spin_unlock_bh(&ifp->lock);24742423out:···25592490 addrconf_mod_timer(ifp, AC_RS, ifp->idev->cnf.rtr_solicit_interval);25602491 spin_unlock_bh(&ifp->lock);25612492 }24932493+}24942494+24952495+static void addrconf_dad_run(struct inet6_dev *idev) {24962496+ struct inet6_ifaddr *ifp;24972497+24982498+ read_lock_bh(&idev->lock);24992499+ for (ifp = idev->addr_list; ifp; ifp = ifp->if_next) {25002500+ spin_lock_bh(&ifp->lock);25012501+ if (!(ifp->flags & IFA_F_TENTATIVE)) {25022502+ spin_unlock_bh(&ifp->lock);25032503+ continue;25042504+ }25052505+ spin_unlock_bh(&ifp->lock);25062506+ addrconf_dad_kick(ifp);25072507+ }25082508+ read_unlock_bh(&idev->lock);25622509}2563251025642511#ifdef CONFIG_PROC_FS
+14-2
net/ipv6/icmp.c
···328328 iif = skb->dev->ifindex;329329330330 /*331331- * Must not send if we know that source is Anycast also.332332- * for now we don't know that.331331+ * Must not send error if the source does not uniquely332332+ * identify a single node (RFC2463 Section 2.4).333333+ * We check unspecified / multicast addresses here,334334+ * and anycast addresses will be checked later.333335 */334336 if ((addr_type == IPV6_ADDR_ANY) || (addr_type & IPV6_ADDR_MULTICAST)) {335337 LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: addr_any/mcast source\n");···375373 err = ip6_dst_lookup(sk, &dst, &fl);376374 if (err)377375 goto out;376376+377377+ /*378378+ * We won't send icmp if the destination is known379379+ * anycast.380380+ */381381+ if (((struct rt6_info *)dst)->rt6i_flags & RTF_ANYCAST) {382382+ LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: acast source\n");383383+ goto out_dst_release;384384+ }385385+378386 if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0)379387 goto out;380388
+9-4
net/ipv6/route.c
···413413 rt = ip6_rt_copy(ort);414414415415 if (rt) {416416- ipv6_addr_copy(&rt->rt6i_dst.addr, daddr);417417-418418- if (!(rt->rt6i_flags&RTF_GATEWAY))416416+ if (!(rt->rt6i_flags&RTF_GATEWAY)) {417417+ if (rt->rt6i_dst.plen != 128 &&418418+ ipv6_addr_equal(&rt->rt6i_dst.addr, daddr))419419+ rt->rt6i_flags |= RTF_ANYCAST;419420 ipv6_addr_copy(&rt->rt6i_gateway, daddr);421421+ }420422423423+ ipv6_addr_copy(&rt->rt6i_dst.addr, daddr);421424 rt->rt6i_dst.plen = 128;422425 rt->rt6i_flags |= RTF_CACHE;423426 rt->u.dst.flags |= DST_HOST;···14161413 rt->u.dst.obsolete = -1;1417141414181415 rt->rt6i_flags = RTF_UP | RTF_NONEXTHOP;14191419- if (!anycast)14161416+ if (anycast)14171417+ rt->rt6i_flags |= RTF_ANYCAST;14181418+ else14201419 rt->rt6i_flags |= RTF_LOCAL;14211420 rt->rt6i_nexthop = ndisc_get_neigh(rt->rt6i_dev, &rt->rt6i_gateway);14221421 if (rt->rt6i_nexthop == NULL) {
+3-3
net/netrom/nr_in.c
···9999 break;100100101101 case NR_RESET:102102- if (sysctl_netrom_reset_circuit);102102+ if (sysctl_netrom_reset_circuit)103103 nr_disconnect(sk, ECONNRESET);104104 break;105105···130130 break;131131132132 case NR_RESET:133133- if (sysctl_netrom_reset_circuit);133133+ if (sysctl_netrom_reset_circuit)134134 nr_disconnect(sk, ECONNRESET);135135 break;136136···265265 break;266266267267 case NR_RESET:268268- if (sysctl_netrom_reset_circuit);268268+ if (sysctl_netrom_reset_circuit)269269 nr_disconnect(sk, ECONNRESET);270270 break;271271