Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Kernel v2.6.25-rc7 /fs/pipe.c

Filename:/fs/pipe.c
Lines Added:21
Lines Deleted:24
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1-git4 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25  2.6.25-git4  2.6.25-git5  2.6.25-git6 

Location
[  2.6.25-rc7
  [  fs
     o  pipe.c

Patch

diff --git a/fs/pipe.c b/fs/pipe.c
index e66ec48..8be381b 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -171,7 +171,7 @@ static void anon_pipe_buf_release(struct pipe_inode_info *pipe,
  *
  * Description:
  *   This function returns a kernel virtual address mapping for the
- *   passed in @pipe_buffer. If @atomic is set, an atomic map is provided
+ *   pipe_buffer passed in @buf. If @atomic is set, an atomic map is provided
  *   and the caller has to be careful not to fault before calling
  *   the unmap function.
  *
@@ -208,15 +208,15 @@ void generic_pipe_buf_unmap(struct pipe_inode_info *pipe,
 }
 
 /**
- * generic_pipe_buf_steal - attempt to take ownership of a @pipe_buffer
+ * generic_pipe_buf_steal - attempt to take ownership of a &pipe_buffer
  * @pipe:   the pipe that the buffer belongs to
  * @buf:   the buffer to attempt to steal
  *
  * Description:
- *   This function attempts to steal the @struct page attached to
+ *   This function attempts to steal the &struct page attached to
  *   @buf. If successful, this function returns 0 and returns with
  *   the page locked. The caller may then reuse the page for whatever
- *   he wishes, the typical use is insertion into a different file
+ *   he wishes; the typical use is insertion into a different file
  *   page cache.
  */
 int generic_pipe_buf_steal(struct pipe_inode_info *pipe,
@@ -238,7 +238,7 @@ int generic_pipe_buf_steal(struct pipe_inode_info *pipe,
 }
 
 /**
- * generic_pipe_buf_get - get a reference to a @struct pipe_buffer
+ * generic_pipe_buf_get - get a reference to a &struct pipe_buffer
  * @pipe:   the pipe that the buffer belongs to
  * @buf:   the buffer to get a reference to
  *
@@ -576,9 +576,7 @@ bad_pipe_w(struct file *filp, const char __user *buf, size_t count,
    return -EBADF;
 }
 
-static int
-pipe_ioctl(struct inode *pino, struct file *filp,
-      unsigned int cmd, unsigned long arg)
+static long pipe_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
    struct inode *inode = filp->f_path.dentry->d_inode;
    struct pipe_inode_info *pipe;
@@ -785,7 +783,7 @@ const struct file_operations read_fifo_fops = {
    .aio_read   = pipe_read,
    .write      = bad_pipe_w,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_read_open,
    .release   = pipe_read_release,
    .fasync      = pipe_read_fasync,
@@ -797,7 +795,7 @@ const struct file_operations write_fifo_fops = {
    .write      = do_sync_write,
    .aio_write   = pipe_write,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_write_open,
    .release   = pipe_write_release,
    .fasync      = pipe_write_fasync,
@@ -810,7 +808,7 @@ const struct file_operations rdwr_fifo_fops = {
    .write      = do_sync_write,
    .aio_write   = pipe_write,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_rdwr_open,
    .release   = pipe_rdwr_release,
    .fasync      = pipe_rdwr_fasync,
@@ -822,7 +820,7 @@ static const struct file_operations read_pipe_fops = {
    .aio_read   = pipe_read,
    .write      = bad_pipe_w,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_read_open,
    .release   = pipe_read_release,
    .fasync      = pipe_read_fasync,
@@ -834,7 +832,7 @@ static const struct file_operations write_pipe_fops = {
    .write      = do_sync_write,
    .aio_write   = pipe_write,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_write_open,
    .release   = pipe_write_release,
    .fasync      = pipe_write_fasync,
@@ -847,7 +845,7 @@ static const struct file_operations rdwr_pipe_fops = {
    .write      = do_sync_write,
    .aio_write   = pipe_write,
    .poll      = pipe_poll,
-   .ioctl      = pipe_ioctl,
+   .unlocked_ioctl   = pipe_ioctl,
    .open      = pipe_rdwr_open,
    .release   = pipe_rdwr_release,
    .fasync      = pipe_rdwr_fasync,
@@ -959,13 +957,10 @@ struct file *create_write_pipe(void)
    struct dentry *dentry;
    struct qstr name = { .name = "" };
 
-   f = get_empty_filp();
-   if (!f)
-      return ERR_PTR(-ENFILE);
    err = -ENFILE;
    inode = get_pipe_inode();
    if (!inode)
-      goto err_file;
+      goto err;
 
    err = -ENOMEM;
    dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &name);
@@ -980,22 +975,24 @@ struct file *create_write_pipe(void)
     */
    dentry->d_flags &= ~DCACHE_UNHASHED;
    d_instantiate(dentry, inode);
-   f->f_path.mnt = mntget(pipe_mnt);
-   f->f_path.dentry = dentry;
+
+   err = -ENFILE;
+   f = alloc_file(pipe_mnt, dentry, FMODE_WRITE, &write_pipe_fops);
+   if (!f)
+      goto err_dentry;
    f->f_mapping = inode->i_mapping;
 
    f->f_flags = O_WRONLY;
-   f->f_op = &write_pipe_fops;
-   f->f_mode = FMODE_WRITE;
    f->f_version = 0;
 
    return f;
 
+ err_dentry:
+   dput(dentry);
  err_inode:
    free_pipe_info(inode);
    iput(inode);
- err_file:
-   put_filp(f);
+ err:
    return ERR_PTR(err);
 }
 


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.