summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Altaparmakov <aia21@cantab.net>2004-06-29 16:07:52 +0100
committerAnton Altaparmakov <aia21@cantab.net>2004-06-29 16:07:52 +0100
commita4f528d2f69110f8c7e3261ecbab5c09a5eb15a2 (patch)
treecf7a7a639ba6b47f52264c8322cafde61c6941f4
parent7920e8ff1b3fe517a5f3add19a16e4798923cdb2 (diff)
parent78019117c468022c21a3a8e8fde7d1ad51cd9c81 (diff)
Merge cantab.net:/home/src/ntfs-2.6
into cantab.net:/home/src/ntfs-2.6-devel
-rw-r--r--Documentation/networking/pktgen.txt4
-rw-r--r--arch/ppc64/kernel/irq.c2
-rw-r--r--arch/sh/kernel/cpu/sh4/sq.c2
-rw-r--r--fs/aio.c6
-rw-r--r--fs/hugetlbfs/inode.c3
-rw-r--r--fs/nfsctl.c1
-rw-r--r--include/linux/aio.h7
-rw-r--r--include/linux/vmalloc.h2
-rw-r--r--include/net/sock.h4
-rw-r--r--net/decnet/dn_nsp_in.c2
-rw-r--r--net/socket.c33
-rw-r--r--net/sunrpc/rpc_pipe.c1
12 files changed, 50 insertions, 17 deletions
diff --git a/Documentation/networking/pktgen.txt b/Documentation/networking/pktgen.txt
index 776210590e85..99c1485d7b4a 100644
--- a/Documentation/networking/pktgen.txt
+++ b/Documentation/networking/pktgen.txt
@@ -11,13 +11,13 @@ How to use the Linux packet generator module.
5. After this two commands are defined:
A. "pg" to start generator and to get results.
B. "pgset" to change generator parameters. F.e.
- pgset "clone_skb 100" sets the number of coppies of the same packet
+ pgset "clone_skb 100" sets the number of copies of the same packet
will be sent before a new packet is allocated
pgset "clone_skb 0" use multiple SKBs for packet generation
pgset "pkt_size 9014" sets packet size to 9014
pgset "frags 5" packet will consist of 5 fragments
pgset "count 200000" sets number of packets to send, set to zero
- for continious sends untill explicitly
+ for continuous sends until explicitly
stopped.
pgset "ipg 5000" sets artificial gap inserted between packets
to 5000 nanoseconds
diff --git a/arch/ppc64/kernel/irq.c b/arch/ppc64/kernel/irq.c
index 27e11b3dfd02..97be40525c47 100644
--- a/arch/ppc64/kernel/irq.c
+++ b/arch/ppc64/kernel/irq.c
@@ -807,7 +807,7 @@ static int prof_cpu_mask_write_proc (struct file *file, const char __user *buffe
{
unsigned i;
for (i=0; i<NR_CPUS; ++i) {
- if ( paca[i].prof_buffer && cpu_isset(1, new_value) )
+ if ( paca[i].prof_buffer && cpu_isset(i, new_value) )
paca[i].prof_enabled = 1;
else
paca[i].prof_enabled = 0;
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c
index 7a0eb521ee7f..3dfe1741d10c 100644
--- a/arch/sh/kernel/cpu/sh4/sq.c
+++ b/arch/sh/kernel/cpu/sh4/sq.c
@@ -34,8 +34,6 @@
static LIST_HEAD(sq_mapping_list);
static spinlock_t sq_mapping_lock = SPIN_LOCK_UNLOCKED;
-extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags, unsigned long start, unsigned long end);
-
/**
* sq_flush - Flush (prefetch) the store queue cache
*
diff --git a/fs/aio.c b/fs/aio.c
index 6788528f203f..6b109f029250 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -396,6 +396,8 @@ static struct kiocb fastcall *__aio_get_req(struct kioctx *ctx)
req->ki_cancel = NULL;
req->ki_retry = NULL;
req->ki_obj.user = NULL;
+ req->ki_dtor = NULL;
+ req->private = NULL;
/* Check if the completion queue has enough free space to
* accept an event from this io.
@@ -436,9 +438,13 @@ static inline struct kiocb *aio_get_req(struct kioctx *ctx)
static inline void really_put_req(struct kioctx *ctx, struct kiocb *req)
{
+ if (req->ki_dtor)
+ req->ki_dtor(req);
req->ki_ctx = NULL;
req->ki_filp = NULL;
req->ki_obj.user = NULL;
+ req->ki_dtor = NULL;
+ req->private = NULL;
kmem_cache_free(kiocb_cachep, req);
ctx->reqs_active--;
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index f2893bbc5480..85b3a8565a28 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -329,9 +329,6 @@ static int hugetlbfs_setattr(struct dentry *dentry, struct iattr *attr)
if (error)
goto out;
- error = security_inode_setattr(dentry, attr);
- if (error)
- goto out;
if (ia_valid & ATTR_SIZE) {
error = -EINVAL;
if (!(attr->ia_size & ~HPAGE_MASK))
diff --git a/fs/nfsctl.c b/fs/nfsctl.c
index 12472dd2a99d..aaf9f5640eb3 100644
--- a/fs/nfsctl.c
+++ b/fs/nfsctl.c
@@ -32,6 +32,7 @@ static struct file *do_open(char *name, int flags)
nd.dentry = dget(nd.mnt->mnt_root);
nd.last_type = LAST_ROOT;
nd.flags = 0;
+ nd.depth = 0;
error = path_walk(name, &nd);
if (error)
diff --git a/include/linux/aio.h b/include/linux/aio.h
index 93fe78800740..461a3b0736e0 100644
--- a/include/linux/aio.h
+++ b/include/linux/aio.h
@@ -23,8 +23,6 @@ struct kioctx;
#define KIOCB_SYNC_KEY (~0U)
-#define KIOCB_PRIVATE_SIZE (24 * sizeof(long))
-
/* ki_flags bits */
#define KIF_LOCKED 0
#define KIF_KICKED 1
@@ -55,6 +53,7 @@ struct kiocb {
struct kioctx *ki_ctx; /* may be NULL for sync ops */
int (*ki_cancel)(struct kiocb *, struct io_event *);
long (*ki_retry)(struct kiocb *);
+ void (*ki_dtor)(struct kiocb *);
struct list_head ki_list; /* the aio core uses this
* for cancellation */
@@ -65,8 +64,7 @@ struct kiocb {
} ki_obj;
__u64 ki_user_data; /* user's data for completion */
loff_t ki_pos;
-
- char private[KIOCB_PRIVATE_SIZE];
+ void *private;
};
#define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY)
@@ -79,6 +77,7 @@ struct kiocb {
(x)->ki_filp = (filp); \
(x)->ki_ctx = &tsk->active_mm->default_kioctx; \
(x)->ki_cancel = NULL; \
+ (x)->ki_dtor = NULL; \
(x)->ki_obj.tsk = tsk; \
} while (0)
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index bad993c16531..8c68717810c3 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -36,6 +36,8 @@ extern void vunmap(void *addr);
* Lowlevel-APIs (not for driver use!)
*/
extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
+extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
+ unsigned long start, unsigned long end);
extern struct vm_struct *remove_vm_area(void *addr);
extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
struct page ***pages);
diff --git a/include/net/sock.h b/include/net/sock.h
index c3277f3ecb20..4dcba49115ba 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -617,17 +617,17 @@ struct sock_iocb {
struct scm_cookie *scm;
struct msghdr *msg, async_msg;
struct iovec async_iov;
+ struct kiocb *kiocb;
};
static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb)
{
- BUG_ON(sizeof(struct sock_iocb) > KIOCB_PRIVATE_SIZE);
return (struct sock_iocb *)iocb->private;
}
static inline struct kiocb *siocb_to_kiocb(struct sock_iocb *si)
{
- return container_of((void *)si, struct kiocb, private);
+ return si->kiocb;
}
struct socket_alloc {
diff --git a/net/decnet/dn_nsp_in.c b/net/decnet/dn_nsp_in.c
index a77fa9fd1c79..05d84ed7e4e6 100644
--- a/net/decnet/dn_nsp_in.c
+++ b/net/decnet/dn_nsp_in.c
@@ -504,7 +504,7 @@ static void dn_nsp_linkservice(struct sock *sk, struct sk_buff *skb)
struct dn_scp *scp = DN_SK(sk);
unsigned short segnum;
unsigned char lsflags;
- char fcval;
+ signed char fcval;
int wake_up = 0;
char *ptr = skb->data;
unsigned char fctype = scp->services_rem & NSP_FC_MASK;
diff --git a/net/socket.c b/net/socket.c
index 1aa2ce2a3139..d9e336637739 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -548,9 +548,11 @@ static inline int __sock_sendmsg(struct kiocb *iocb, struct socket *sock,
int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
{
struct kiocb iocb;
+ struct sock_iocb siocb;
int ret;
init_sync_kiocb(&iocb, NULL);
+ iocb.private = &siocb;
ret = __sock_sendmsg(&iocb, sock, msg, size);
if (-EIOCBQUEUED == ret)
ret = wait_on_sync_kiocb(&iocb);
@@ -581,15 +583,22 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg,
size_t size, int flags)
{
struct kiocb iocb;
+ struct sock_iocb siocb;
int ret;
init_sync_kiocb(&iocb, NULL);
+ iocb.private = &siocb;
ret = __sock_recvmsg(&iocb, sock, msg, size, flags);
if (-EIOCBQUEUED == ret)
ret = wait_on_sync_kiocb(&iocb);
return ret;
}
+static void sock_aio_dtor(struct kiocb *iocb)
+{
+ kfree(iocb->private);
+}
+
/*
* Read data from a socket. ubuf is a user mode pointer. We make sure the user
* area ubuf...ubuf+size-1 is writable before asking the protocol.
@@ -598,7 +607,7 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg,
static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
size_t size, loff_t pos)
{
- struct sock_iocb *x = kiocb_to_siocb(iocb);
+ struct sock_iocb *x, siocb;
struct socket *sock;
int flags;
@@ -607,6 +616,16 @@ static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
if (size==0) /* Match SYS5 behaviour */
return 0;
+ if (is_sync_kiocb(iocb))
+ x = &siocb;
+ else {
+ x = kmalloc(sizeof(struct sock_iocb), GFP_KERNEL);
+ if (!x)
+ return -ENOMEM;
+ iocb->ki_dtor = sock_aio_dtor;
+ }
+ iocb->private = x;
+ x->kiocb = iocb;
sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode);
x->async_msg.msg_name = NULL;
@@ -631,7 +650,7 @@ static ssize_t sock_aio_read(struct kiocb *iocb, char __user *ubuf,
static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
size_t size, loff_t pos)
{
- struct sock_iocb *x = kiocb_to_siocb(iocb);
+ struct sock_iocb *x, siocb;
struct socket *sock;
if (pos != 0)
@@ -639,6 +658,16 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const char __user *ubuf,
if(size==0) /* Match SYS5 behaviour */
return 0;
+ if (is_sync_kiocb(iocb))
+ x = &siocb;
+ else {
+ x = kmalloc(sizeof(struct sock_iocb), GFP_KERNEL);
+ if (!x)
+ return -ENOMEM;
+ iocb->ki_dtor = sock_aio_dtor;
+ }
+ iocb->private = x;
+ x->kiocb = iocb;
sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode);
x->async_msg.msg_name = NULL;
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 8a8c4eb6c78a..95ce716823d8 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -433,6 +433,7 @@ rpc_lookup_parent(char *path, struct nameidata *nd)
nd->dentry = dget(rpc_mount->mnt_root);
nd->last_type = LAST_ROOT;
nd->flags = LOOKUP_PARENT;
+ nd->depth = 0;
if (path_walk(path, nd)) {
printk(KERN_WARNING "%s: %s failed to find path %s\n",