Commit dbd4e27f authored by Steve French's avatar Steve French

Merge bk://linux.bkbits.net/linux-2.5

into hostme.bitkeeper.com:/repos/c/cifs/linux-2.5cifs
parents f87c615d 4154cebf
...@@ -234,9 +234,8 @@ W: http://www.canb.auug.org.au/~sfr/ ...@@ -234,9 +234,8 @@ W: http://www.canb.auug.org.au/~sfr/
S: Supported S: Supported
APPLETALK NETWORK LAYER APPLETALK NETWORK LAYER
P: Jay Schulist P: Arnaldo Carvalho de Melo
M: jschlst@samba.org M: acme@conectiva.com.br
L: linux-atalk@lists.netspace.org
S: Maintained S: Maintained
ARM26 ARCHITECTURE ARM26 ARCHITECTURE
......
...@@ -101,6 +101,13 @@ struct pt_regs * save_v86_state(struct kernel_vm86_regs * regs) ...@@ -101,6 +101,13 @@ struct pt_regs * save_v86_state(struct kernel_vm86_regs * regs)
struct pt_regs *ret; struct pt_regs *ret;
unsigned long tmp; unsigned long tmp;
/*
* This gets called from entry.S with interrupts disabled, but
* from process context. Enable interrupts here, before trying
* to access user space.
*/
local_irq_enable();
if (!current->thread.vm86_info) { if (!current->thread.vm86_info) {
printk("no vm86_info: BAD\n"); printk("no vm86_info: BAD\n");
do_exit(SIGSEGV); do_exit(SIGSEGV);
......
...@@ -190,16 +190,27 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag ...@@ -190,16 +190,27 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
void *ioremap_nocache (unsigned long phys_addr, unsigned long size) void *ioremap_nocache (unsigned long phys_addr, unsigned long size)
{ {
unsigned long last_addr;
void *p = __ioremap(phys_addr, size, _PAGE_PCD); void *p = __ioremap(phys_addr, size, _PAGE_PCD);
if (!p) if (!p)
return p; return p;
if (phys_addr + size < virt_to_phys(high_memory)) { /* Guaranteed to be > phys_addr, as per __ioremap() */
last_addr = phys_addr + size - 1;
if (last_addr < virt_to_phys(high_memory)) {
struct page *ppage = virt_to_page(__va(phys_addr)); struct page *ppage = virt_to_page(__va(phys_addr));
unsigned long npages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT; unsigned long npages;
phys_addr &= PAGE_MASK;
/* This might overflow and become zero.. */
last_addr = PAGE_ALIGN(last_addr);
BUG_ON(phys_addr+size > (unsigned long)high_memory); /* .. but that's ok, because modulo-2**n arithmetic will make
BUG_ON(phys_addr + size < phys_addr); * the page-aligned "last - first" come out right.
*/
npages = (last_addr - phys_addr) >> PAGE_SHIFT;
if (change_page_attr(ppage, npages, PAGE_KERNEL_NOCACHE) < 0) { if (change_page_attr(ppage, npages, PAGE_KERNEL_NOCACHE) < 0) {
iounmap(p); iounmap(p);
......
...@@ -77,7 +77,7 @@ wrap_mmu_context (struct mm_struct *mm) ...@@ -77,7 +77,7 @@ wrap_mmu_context (struct mm_struct *mm)
{ {
int cpu = get_cpu(); /* prevent preemption/migration */ int cpu = get_cpu(); /* prevent preemption/migration */
for (i = 0; i < NR_CPUS; ++i) for (i = 0; i < NR_CPUS; ++i)
if (i != cpu) if (cpu_online(i) && (i != cpu))
per_cpu(ia64_need_tlb_flush, i) = 1; per_cpu(ia64_need_tlb_flush, i) = 1;
put_cpu(); put_cpu();
} }
......
...@@ -279,8 +279,7 @@ sn_pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int dire ...@@ -279,8 +279,7 @@ sn_pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int dire
* scatterlist. * scatterlist.
*/ */
for (i = 0; i < nents; i++, sg++) { for (i = 0; i < nents; i++, sg++) {
phys_addr = __pa(sg->dma_address ? sg->dma_address : phys_addr = __pa((unsigned long)page_address(sg->page) + sg->offset);
(unsigned long)page_address(sg->page) + sg->offset);
/* /*
* Handle the most common case: 64 bit cards. This * Handle the most common case: 64 bit cards. This
......
...@@ -780,6 +780,11 @@ static char *rq_flags[] = { ...@@ -780,6 +780,11 @@ static char *rq_flags[] = {
"REQ_PM_SUSPEND", "REQ_PM_SUSPEND",
"REQ_PM_RESUME", "REQ_PM_RESUME",
"REQ_PM_SHUTDOWN", "REQ_PM_SHUTDOWN",
"REQ_IDETAPE_PC1",
"REQ_IDETAPE_PC2",
"REQ_IDETAPE_READ",
"REQ_IDETAPE_WRITE",
"REQ_IDETAPE_READ_BUFFER",
}; };
void blk_dump_rq_flags(struct request *rq, char *msg) void blk_dump_rq_flags(struct request *rq, char *msg)
......
...@@ -141,6 +141,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata = ...@@ -141,6 +141,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.device_id = PCI_DEVICE_ID_SI_655, .device_id = PCI_DEVICE_ID_SI_655,
.chipset_name = "655", .chipset_name = "655",
}, },
{
.device_id = PCI_DEVICE_ID_SI_661,
.chipset_name = "661",
},
{ {
.device_id = PCI_DEVICE_ID_SI_730, .device_id = PCI_DEVICE_ID_SI_730,
.chipset_name = "730", .chipset_name = "730",
...@@ -153,6 +157,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata = ...@@ -153,6 +157,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.device_id = PCI_DEVICE_ID_SI_740, .device_id = PCI_DEVICE_ID_SI_740,
.chipset_name = "740", .chipset_name = "740",
}, },
{
.device_id = PCI_DEVICE_ID_SI_741,
.chipset_name = "741",
},
{ {
.device_id = PCI_DEVICE_ID_SI_745, .device_id = PCI_DEVICE_ID_SI_745,
.chipset_name = "745", .chipset_name = "745",
...@@ -161,6 +169,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata = ...@@ -161,6 +169,10 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
.device_id = PCI_DEVICE_ID_SI_746, .device_id = PCI_DEVICE_ID_SI_746,
.chipset_name = "746", .chipset_name = "746",
}, },
{
.device_id = PCI_DEVICE_ID_SI_760,
.chipset_name = "760",
},
{ }, /* dummy final entry, always present */ { }, /* dummy final entry, always present */
}; };
......
This diff is collapsed.
...@@ -422,7 +422,7 @@ static __init int trif_probe(int unit) ...@@ -422,7 +422,7 @@ static __init int trif_probe(int unit)
extern int loopback_init(void); extern int loopback_init(void);
/* Statically configured drivers -- order matters here. */ /* Statically configured drivers -- order matters here. */
void __init probe_old_netdevs(void) static int __init net_olddevs_init(void)
{ {
int num; int num;
...@@ -450,8 +450,12 @@ void __init probe_old_netdevs(void) ...@@ -450,8 +450,12 @@ void __init probe_old_netdevs(void)
#ifdef CONFIG_LTPC #ifdef CONFIG_LTPC
ltpc_probe(); ltpc_probe();
#endif #endif
return 0;
} }
device_initcall(net_olddevs_init);
/* /*
* The @dev_base list is protected by @dev_base_lock and the rtln * The @dev_base list is protected by @dev_base_lock and the rtln
* semaphore. * semaphore.
......
...@@ -45,7 +45,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) ...@@ -45,7 +45,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno)
DBGC((KERN_ERR " got res [%lx:%lx] bus [%lx:%lx] flags %lx for " DBGC((KERN_ERR " got res [%lx:%lx] bus [%lx:%lx] flags %lx for "
"BAR %d of %s\n", res->start, res->end, "BAR %d of %s\n", res->start, res->end,
region.start, region.end, res->flags, region.start, region.end, res->flags,
resno, dev->dev.name)); resno, pci_name(dev)));
new = region.start | (res->flags & PCI_REGION_FLAG_MASK); new = region.start | (res->flags & PCI_REGION_FLAG_MASK);
if (res->flags & IORESOURCE_IO) if (res->flags & IORESOURCE_IO)
......
...@@ -1160,7 +1160,7 @@ int __init isapnp_init(void) ...@@ -1160,7 +1160,7 @@ int __init isapnp_init(void)
return 0; return 0;
} }
fs_initcall(isapnp_init); device_initcall(isapnp_init);
/* format is: noisapnp */ /* format is: noisapnp */
......
...@@ -547,6 +547,8 @@ int minix_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta ...@@ -547,6 +547,8 @@ int minix_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *sta
*/ */
void minix_truncate(struct inode * inode) void minix_truncate(struct inode * inode)
{ {
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)))
return;
if (INODE_VERSION(inode) == MINIX_V1) if (INODE_VERSION(inode) == MINIX_V1)
V1_minix_truncate(inode); V1_minix_truncate(inode);
else else
......
...@@ -193,6 +193,11 @@ enum rq_flag_bits { ...@@ -193,6 +193,11 @@ enum rq_flag_bits {
__REQ_PM_SUSPEND, /* suspend request */ __REQ_PM_SUSPEND, /* suspend request */
__REQ_PM_RESUME, /* resume request */ __REQ_PM_RESUME, /* resume request */
__REQ_PM_SHUTDOWN, /* shutdown request */ __REQ_PM_SHUTDOWN, /* shutdown request */
__REQ_IDETAPE_PC1, /* packet command (first stage) */
__REQ_IDETAPE_PC2, /* packet command (second stage) */
__REQ_IDETAPE_READ,
__REQ_IDETAPE_WRITE,
__REQ_IDETAPE_READ_BUFFER,
__REQ_NR_BITS, /* stops here */ __REQ_NR_BITS, /* stops here */
}; };
...@@ -218,6 +223,11 @@ enum rq_flag_bits { ...@@ -218,6 +223,11 @@ enum rq_flag_bits {
#define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND) #define REQ_PM_SUSPEND (1 << __REQ_PM_SUSPEND)
#define REQ_PM_RESUME (1 << __REQ_PM_RESUME) #define REQ_PM_RESUME (1 << __REQ_PM_RESUME)
#define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN) #define REQ_PM_SHUTDOWN (1 << __REQ_PM_SHUTDOWN)
#define REQ_IDETAPE_PC1 (1 << __REQ_IDETAPE_PC1)
#define REQ_IDETAPE_PC2 (1 << __REQ_IDETAPE_PC2)
#define REQ_IDETAPE_READ (1 << __REQ_IDETAPE_READ)
#define REQ_IDETAPE_WRITE (1 << __REQ_IDETAPE_WRITE)
#define REQ_IDETAPE_READ_BUFFER (1 << __REQ_IDETAPE_READ_BUFFER)
/* /*
* State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME * State information carried for REQ_PM_SUSPEND and REQ_PM_RESUME
......
...@@ -494,7 +494,6 @@ extern struct net_device loopback_dev; /* The loopback */ ...@@ -494,7 +494,6 @@ extern struct net_device loopback_dev; /* The loopback */
extern struct net_device *dev_base; /* All devices */ extern struct net_device *dev_base; /* All devices */
extern rwlock_t dev_base_lock; /* Device list lock */ extern rwlock_t dev_base_lock; /* Device list lock */
extern void probe_old_netdevs(void);
extern int netdev_boot_setup_add(char *name, struct ifmap *map); extern int netdev_boot_setup_add(char *name, struct ifmap *map);
extern int netdev_boot_setup_check(struct net_device *dev); extern int netdev_boot_setup_check(struct net_device *dev);
extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr); extern struct net_device *dev_getbyhwaddr(unsigned short type, char *hwaddr);
......
...@@ -582,12 +582,14 @@ ...@@ -582,12 +582,14 @@
#define PCI_DEVICE_ID_SI_651 0x0651 #define PCI_DEVICE_ID_SI_651 0x0651
#define PCI_DEVICE_ID_SI_652 0x0652 #define PCI_DEVICE_ID_SI_652 0x0652
#define PCI_DEVICE_ID_SI_655 0x0655 #define PCI_DEVICE_ID_SI_655 0x0655
#define PCI_DEVICE_ID_SI_661 0x0661
#define PCI_DEVICE_ID_SI_730 0x0730 #define PCI_DEVICE_ID_SI_730 0x0730
#define PCI_DEVICE_ID_SI_733 0x0733 #define PCI_DEVICE_ID_SI_733 0x0733
#define PCI_DEVICE_ID_SI_630_VGA 0x6300 #define PCI_DEVICE_ID_SI_630_VGA 0x6300
#define PCI_DEVICE_ID_SI_730_VGA 0x7300 #define PCI_DEVICE_ID_SI_730_VGA 0x7300
#define PCI_DEVICE_ID_SI_735 0x0735 #define PCI_DEVICE_ID_SI_735 0x0735
#define PCI_DEVICE_ID_SI_740 0x0740 #define PCI_DEVICE_ID_SI_740 0x0740
#define PCI_DEVICE_ID_SI_741 0x0741
#define PCI_DEVICE_ID_SI_745 0x0745 #define PCI_DEVICE_ID_SI_745 0x0745
#define PCI_DEVICE_ID_SI_746 0x0746 #define PCI_DEVICE_ID_SI_746 0x0746
#define PCI_DEVICE_ID_SI_748 0x0748 #define PCI_DEVICE_ID_SI_748 0x0748
...@@ -595,6 +597,7 @@ ...@@ -595,6 +597,7 @@
#define PCI_DEVICE_ID_SI_751 0x0751 #define PCI_DEVICE_ID_SI_751 0x0751
#define PCI_DEVICE_ID_SI_752 0x0752 #define PCI_DEVICE_ID_SI_752 0x0752
#define PCI_DEVICE_ID_SI_755 0x0755 #define PCI_DEVICE_ID_SI_755 0x0755
#define PCI_DEVICE_ID_SI_760 0x0760
#define PCI_DEVICE_ID_SI_900 0x0900 #define PCI_DEVICE_ID_SI_900 0x0900
#define PCI_DEVICE_ID_SI_961 0x0961 #define PCI_DEVICE_ID_SI_961 0x0961
#define PCI_DEVICE_ID_SI_962 0x0962 #define PCI_DEVICE_ID_SI_962 0x0962
......
...@@ -3033,8 +3033,6 @@ static int __init net_dev_init(void) ...@@ -3033,8 +3033,6 @@ static int __init net_dev_init(void)
dev_boot_phase = 0; dev_boot_phase = 0;
probe_old_netdevs();
open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL); open_softirq(NET_TX_SOFTIRQ, net_tx_action, NULL);
open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL); open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
...@@ -3049,7 +3047,7 @@ static int __init net_dev_init(void) ...@@ -3049,7 +3047,7 @@ static int __init net_dev_init(void)
return rc; return rc;
} }
fs_initcall(net_dev_init); subsys_initcall(net_dev_init);
EXPORT_SYMBOL(__dev_get); EXPORT_SYMBOL(__dev_get);
EXPORT_SYMBOL(__dev_get_by_flags); EXPORT_SYMBOL(__dev_get_by_flags);
......
...@@ -187,7 +187,7 @@ static inline int tcp_bind_conflict(struct sock *sk, struct tcp_bind_bucket *tb) ...@@ -187,7 +187,7 @@ static inline int tcp_bind_conflict(struct sock *sk, struct tcp_bind_bucket *tb)
sk_for_each_bound(sk2, node, &tb->owners) { sk_for_each_bound(sk2, node, &tb->owners) {
if (sk != sk2 && if (sk != sk2 &&
!ipv6_only_sock(sk2) && !tcp_v6_ipv6only(sk2) &&
(!sk->sk_bound_dev_if || (!sk->sk_bound_dev_if ||
!sk2->sk_bound_dev_if || !sk2->sk_bound_dev_if ||
sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) { sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) {
......
...@@ -250,40 +250,18 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr) ...@@ -250,40 +250,18 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
if (!sk->sk_zapped) if (!sk->sk_zapped)
goto out; goto out;
/* bind to a specific sap, optional. */ rc = -ENODEV;
if (!addr->sllc_sap) { llc->dev = dev_getfirstbyhwtype(addr->sllc_arphrd);
if (!llc->dev)
goto out;
rc = -EUSERS; rc = -EUSERS;
addr->sllc_sap = llc_ui_autoport(); llc->laddr.lsap = llc_ui_autoport();
if (!addr->sllc_sap) if (!llc->laddr.lsap)
goto out; goto out;
}
sap = llc_sap_find(addr->sllc_sap);
if (!sap) {
sap = llc_sap_open(addr->sllc_sap, NULL);
rc = -EBUSY; /* some other network layer is using the sap */ rc = -EBUSY; /* some other network layer is using the sap */
sap = llc_sap_open(llc->laddr.lsap, NULL);
if (!sap) if (!sap)
goto out; goto out;
} else {
struct llc_addr laddr, daddr;
struct sock *ask;
memset(&laddr, 0, sizeof(laddr));
memset(&daddr, 0, sizeof(daddr));
/*
* FIXME: check if the the address is multicast,
* only SOCK_DGRAM can do this.
*/
memcpy(laddr.mac, addr->sllc_mac, IFHWADDRLEN);
laddr.lsap = addr->sllc_sap;
rc = -EADDRINUSE; /* mac + sap clash. */
ask = llc_lookup_established(sap, &daddr, &laddr);
if (ask) {
sock_put(ask);
goto out;
}
}
llc->laddr.lsap = addr->sllc_sap;
if (llc->dev)
memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN); memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN);
memcpy(&llc->addr, addr, sizeof(llc->addr)); memcpy(&llc->addr, addr, sizeof(llc->addr));
/* assign new connection to its SAP */ /* assign new connection to its SAP */
...@@ -315,6 +293,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) ...@@ -315,6 +293,8 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
{ {
struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr; struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr;
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct llc_opt *llc = llc_sk(sk);
struct llc_sap *sap;
int rc = -EINVAL; int rc = -EINVAL;
dprintk("%s: binding %02X\n", __FUNCTION__, addr->sllc_sap); dprintk("%s: binding %02X\n", __FUNCTION__, addr->sllc_sap);
...@@ -323,8 +303,43 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen) ...@@ -323,8 +303,43 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
rc = -EAFNOSUPPORT; rc = -EAFNOSUPPORT;
if (addr->sllc_family != AF_LLC) if (addr->sllc_family != AF_LLC)
goto out; goto out;
/* use autobind, to avoid code replication. */ if (!addr->sllc_sap) {
rc = llc_ui_autobind(sock, addr); rc = -EUSERS;
addr->sllc_sap = llc_ui_autoport();
if (!addr->sllc_sap)
goto out;
}
sap = llc_sap_find(addr->sllc_sap);
if (!sap) {
sap = llc_sap_open(addr->sllc_sap, NULL);
rc = -EBUSY; /* some other network layer is using the sap */
if (!sap)
goto out;
} else {
struct llc_addr laddr, daddr;
struct sock *ask;
memset(&laddr, 0, sizeof(laddr));
memset(&daddr, 0, sizeof(daddr));
/*
* FIXME: check if the the address is multicast,
* only SOCK_DGRAM can do this.
*/
memcpy(laddr.mac, addr->sllc_mac, IFHWADDRLEN);
laddr.lsap = addr->sllc_sap;
rc = -EADDRINUSE; /* mac + sap clash. */
ask = llc_lookup_established(sap, &daddr, &laddr);
if (ask) {
sock_put(ask);
goto out;
}
}
llc->laddr.lsap = addr->sllc_sap;
memcpy(llc->laddr.mac, addr->sllc_mac, IFHWADDRLEN);
memcpy(&llc->addr, addr, sizeof(llc->addr));
/* assign new connection to its SAP */
llc_sap_add_socket(sap, sk);
rc = sk->sk_zapped = 0;
out: out:
return rc; return rc;
} }
...@@ -399,14 +414,6 @@ static int llc_ui_connect(struct socket *sock, struct sockaddr *uaddr, ...@@ -399,14 +414,6 @@ static int llc_ui_connect(struct socket *sock, struct sockaddr *uaddr,
llc->daddr.lsap = addr->sllc_sap; llc->daddr.lsap = addr->sllc_sap;
memcpy(llc->daddr.mac, addr->sllc_mac, IFHWADDRLEN); memcpy(llc->daddr.mac, addr->sllc_mac, IFHWADDRLEN);
} }
if (!llc->dev) {
rc = -ENODEV;
dev = dev_getfirstbyhwtype(addr->sllc_arphrd);
if (!dev)
goto out;
llc->dev = dev;
memcpy(llc->laddr.mac, llc->dev->dev_addr, IFHWADDRLEN);
} else
dev = llc->dev; dev = llc->dev;
if (sk->sk_type != SOCK_STREAM) if (sk->sk_type != SOCK_STREAM)
goto out; goto out;
...@@ -610,7 +617,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags) ...@@ -610,7 +617,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
int rc = -EOPNOTSUPP; int rc = -EOPNOTSUPP;
dprintk("%s: accepting on %02X\n", __FUNCTION__, dprintk("%s: accepting on %02X\n", __FUNCTION__,
llc_sk(sk)->addr.sllc_sap); llc_sk(sk)->laddr.lsap);
lock_sock(sk); lock_sock(sk);
if (sk->sk_type != SOCK_STREAM) if (sk->sk_type != SOCK_STREAM)
goto out; goto out;
...@@ -622,7 +629,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags) ...@@ -622,7 +629,7 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags)
if (rc) if (rc)
goto out; goto out;
dprintk("%s: got a new connection on %02X\n", __FUNCTION__, dprintk("%s: got a new connection on %02X\n", __FUNCTION__,
llc_sk(sk)->addr.sllc_sap); llc_sk(sk)->laddr.lsap);
skb = skb_dequeue(&sk->sk_receive_queue); skb = skb_dequeue(&sk->sk_receive_queue);
rc = -EINVAL; rc = -EINVAL;
if (!skb->sk) if (!skb->sk)
...@@ -747,12 +754,6 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock, ...@@ -747,12 +754,6 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock,
if (rc) if (rc)
goto release; goto release;
} }
if (!llc->dev) {
rc = -ENODEV;
dev = dev_getfirstbyhwtype(addr->sllc_arphrd);
if (!dev)
goto release;
} else
dev = llc->dev; dev = llc->dev;
hdrlen = dev->hard_header_len + llc_ui_header_len(sk, addr); hdrlen = dev->hard_header_len + llc_ui_header_len(sk, addr);
size = hdrlen + len; size = hdrlen + len;
......
...@@ -48,8 +48,6 @@ static struct sock *llc_get_sk_idx(loff_t pos) ...@@ -48,8 +48,6 @@ static struct sock *llc_get_sk_idx(loff_t pos)
--pos; --pos;
} }
read_unlock_bh(&sap->sk_list.lock); read_unlock_bh(&sap->sk_list.lock);
if (!pos)
break;
} }
sk = NULL; sk = NULL;
found: found:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment