Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (1232 commits) iucv: Fix bad merging. net_sched: Add size table for qdiscs net_sched: Add accessor function for packet length for qdiscs net_sched: Add qdisc_enqueue wrapper highmem: Export totalhigh_pages. ipv6 mcast: Omit redundant address family checks in ip6_mc_source(). net: Use standard structures for generic socket address structures. ipv6 netns: Make several "global" sysctl variables namespace aware. netns: Use net_eq() to compare net-namespaces for optimization. ipv6: remove unused macros from net/ipv6.h ipv6: remove unused parameter from ip6_ra_control tcp: fix kernel panic with listening_get_next tcp: Remove redundant checks when setting eff_sacks tcp: options clean up tcp: Fix MD5 signatures for non-linear skbs sctp: Update sctp global memory limit allocations. sctp: remove unnecessary byteshifting, calculate directly in big-endian sctp: Allow only 1 listening socket with SO_REUSEADDR sctp: Do not leak memory on multiple listen() calls sctp: Support ipv6only AF_INET6 sockets. ...
This commit is contained in:
@@ -1326,7 +1326,7 @@ int irlap_driver_rcv(struct sk_buff *skb, struct net_device *dev,
|
||||
int command;
|
||||
__u8 control;
|
||||
|
||||
if (dev_net(dev) != &init_net)
|
||||
if (!net_eq(dev_net(dev), &init_net))
|
||||
goto out;
|
||||
|
||||
/* FIXME: should we get our own field? */
|
||||
|
@@ -631,8 +631,8 @@ dev_irnet_poll(struct file * file,
|
||||
* This is the way pppd configure us and control us while the PPP
|
||||
* instance is active.
|
||||
*/
|
||||
static int
|
||||
dev_irnet_ioctl(struct inode * inode,
|
||||
static long
|
||||
dev_irnet_ioctl(
|
||||
struct file * file,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
@@ -663,6 +663,7 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
{
|
||||
DEBUG(FS_INFO, "Entering PPP discipline.\n");
|
||||
/* PPP channel setup (ap->chan in configued in dev_irnet_open())*/
|
||||
lock_kernel();
|
||||
err = ppp_register_channel(&ap->chan);
|
||||
if(err == 0)
|
||||
{
|
||||
@@ -675,12 +676,14 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
}
|
||||
else
|
||||
DERROR(FS_ERROR, "Can't setup PPP channel...\n");
|
||||
unlock_kernel();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* In theory, should be N_TTY */
|
||||
DEBUG(FS_INFO, "Exiting PPP discipline.\n");
|
||||
/* Disconnect from the generic PPP layer */
|
||||
lock_kernel();
|
||||
if(ap->ppp_open)
|
||||
{
|
||||
ap->ppp_open = 0;
|
||||
@@ -689,24 +692,20 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
else
|
||||
DERROR(FS_ERROR, "Channel not registered !\n");
|
||||
err = 0;
|
||||
unlock_kernel();
|
||||
}
|
||||
break;
|
||||
|
||||
/* Query PPP channel and unit number */
|
||||
case PPPIOCGCHAN:
|
||||
if(!ap->ppp_open)
|
||||
break;
|
||||
if(put_user(ppp_channel_index(&ap->chan), (int __user *)argp))
|
||||
break;
|
||||
DEBUG(FS_INFO, "Query channel.\n");
|
||||
err = 0;
|
||||
if(ap->ppp_open && !put_user(ppp_channel_index(&ap->chan),
|
||||
(int __user *)argp))
|
||||
err = 0;
|
||||
break;
|
||||
case PPPIOCGUNIT:
|
||||
if(!ap->ppp_open)
|
||||
break;
|
||||
if(put_user(ppp_unit_number(&ap->chan), (int __user *)argp))
|
||||
break;
|
||||
DEBUG(FS_INFO, "Query unit number.\n");
|
||||
lock_kernel();
|
||||
if(ap->ppp_open && !put_user(ppp_unit_number(&ap->chan),
|
||||
(int __user *)argp))
|
||||
err = 0;
|
||||
break;
|
||||
|
||||
@@ -726,34 +725,39 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
DEBUG(FS_INFO, "Standard PPP ioctl.\n");
|
||||
if(!capable(CAP_NET_ADMIN))
|
||||
err = -EPERM;
|
||||
else
|
||||
else {
|
||||
lock_kernel();
|
||||
err = ppp_irnet_ioctl(&ap->chan, cmd, arg);
|
||||
unlock_kernel();
|
||||
}
|
||||
break;
|
||||
|
||||
/* TTY IOCTLs : Pretend that we are a tty, to keep pppd happy */
|
||||
/* Get termios */
|
||||
case TCGETS:
|
||||
DEBUG(FS_INFO, "Get termios.\n");
|
||||
lock_kernel();
|
||||
#ifndef TCGETS2
|
||||
if(kernel_termios_to_user_termios((struct termios __user *)argp, &ap->termios))
|
||||
break;
|
||||
if(!kernel_termios_to_user_termios((struct termios __user *)argp, &ap->termios))
|
||||
err = 0;
|
||||
#else
|
||||
if(kernel_termios_to_user_termios_1((struct termios __user *)argp, &ap->termios))
|
||||
break;
|
||||
err = 0;
|
||||
#endif
|
||||
err = 0;
|
||||
unlock_kernel();
|
||||
break;
|
||||
/* Set termios */
|
||||
case TCSETSF:
|
||||
DEBUG(FS_INFO, "Set termios.\n");
|
||||
lock_kernel();
|
||||
#ifndef TCGETS2
|
||||
if(user_termios_to_kernel_termios(&ap->termios, (struct termios __user *)argp))
|
||||
break;
|
||||
if(!user_termios_to_kernel_termios(&ap->termios, (struct termios __user *)argp))
|
||||
err = 0;
|
||||
#else
|
||||
if(user_termios_to_kernel_termios_1(&ap->termios, (struct termios __user *)argp))
|
||||
break;
|
||||
if(!user_termios_to_kernel_termios_1(&ap->termios, (struct termios __user *)argp))
|
||||
err = 0;
|
||||
#endif
|
||||
err = 0;
|
||||
unlock_kernel();
|
||||
break;
|
||||
|
||||
/* Set DTR/RTS */
|
||||
@@ -776,7 +780,9 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
* We should also worry that we don't accept junk here and that
|
||||
* we get rid of our own buffers */
|
||||
#ifdef FLUSH_TO_PPP
|
||||
lock_kernel();
|
||||
ppp_output_wakeup(&ap->chan);
|
||||
unlock_kernel();
|
||||
#endif /* FLUSH_TO_PPP */
|
||||
err = 0;
|
||||
break;
|
||||
@@ -791,7 +797,7 @@ dev_irnet_ioctl(struct inode * inode,
|
||||
|
||||
default:
|
||||
DERROR(FS_ERROR, "Unsupported ioctl (0x%X)\n", cmd);
|
||||
err = -ENOIOCTLCMD;
|
||||
err = -ENOTTY;
|
||||
}
|
||||
|
||||
DEXIT(FS_TRACE, " - err = 0x%X\n", err);
|
||||
|
@@ -76,9 +76,8 @@ static ssize_t
|
||||
static unsigned int
|
||||
dev_irnet_poll(struct file *,
|
||||
poll_table *);
|
||||
static int
|
||||
dev_irnet_ioctl(struct inode *,
|
||||
struct file *,
|
||||
static long
|
||||
dev_irnet_ioctl(struct file *,
|
||||
unsigned int,
|
||||
unsigned long);
|
||||
/* ------------------------ PPP INTERFACE ------------------------ */
|
||||
@@ -102,7 +101,7 @@ static struct file_operations irnet_device_fops =
|
||||
.read = dev_irnet_read,
|
||||
.write = dev_irnet_write,
|
||||
.poll = dev_irnet_poll,
|
||||
.ioctl = dev_irnet_ioctl,
|
||||
.unlocked_ioctl = dev_irnet_ioctl,
|
||||
.open = dev_irnet_open,
|
||||
.release = dev_irnet_close
|
||||
/* Also : llseek, readdir, mmap, flush, fsync, fasync, lock, readv, writev */
|
||||
|
Reference in New Issue
Block a user