lkml.org 
[lkml]   [2008]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] (resend) reuse xxx_fifo_fops for xxx_pipe_fops
    Date
    On Tuesday 01 July 2008 09:32, Andrew Morton wrote:
    > > I noticed that read/write/rdwr_pipe_fops are (1) const and
    > > (2) exactly identical to xxx_fifo_fops, which are also const.
    > >
    > > Attached patch #defines xxx_pipe_fops as aliases to xxx_fifo_fops.
    > > Size difference:
    > >
    > > # size linux-2.6.25-rc6*/*/pipe.o
    > > text data bss dec hex filename
    > > 6534 144 0 6678 1a16 linux-2.6.25-rc6/fs/pipe.o
    > > 5862 144 0 6006 1776 linux-2.6.25-rc6-pt/fs/pipe.o
    > >
    > > Run-tested on 2.6.26-rc8. Please apply.
    > >
    > > Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
    >
    > <argh, an attachment. save-as, read, edit..>

    Let's see how KMail will cope with inline cut-n-paste...

    > > -static const struct file_operations rdwr_pipe_fops = {
    > > - .llseek = no_llseek,
    > > - .read = do_sync_read,
    > > - .aio_read = pipe_read,
    > > - .write = do_sync_write,
    > > - .aio_write = pipe_write,
    > > - .poll = pipe_poll,
    > > - .unlocked_ioctl = pipe_ioctl,
    > > - .open = pipe_rdwr_open,
    > > - .release = pipe_rdwr_release,
    > > - .fasync = pipe_rdwr_fasync,
    > > -};
    > > +#define read_pipe_fops read_fifo_fops
    > > +#define write_pipe_fops write_fifo_fops
    > > +#define rdwr_pipe_fops rdwr_fifo_fops
    >
    > Well OK. But there's a risk that someone will go and modify
    > read_fifo_fops without realising that they're also modifying
    > read_pipe_fops.

    Yes, it is possible.

    > So it'd be better to rename read_fifo_fops to (say) shared_read_fops
    > then do
    >
    > #define read_pipe_fops shared_read_fops
    > #define read_fifo_fops shared_read_fops

    I think since XXX_pipe_fops are only used in this file,
    just explaining this in the comment would be enough.

    Please take a look at the version below.

    Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
    --
    vda


    --- linux-2.6.26-rc8/fs/pipe.c.org Tue Jul 1 11:52:28 2008
    +++ linux-2.6.26-rc8/fs/pipe.c Tue Jul 1 11:58:23 2008
    @@ -777,6 +777,8 @@
    /*
    * The file_operations structs are not static because they
    * are also used in linux/fs/fifo.c to do operations on FIFOs.
    + *
    + * Pipes reuse fifos' file_operations structs.
    */
    const struct file_operations read_fifo_fops = {
    .llseek = no_llseek,
    @@ -815,43 +817,6 @@
    .fasync = pipe_rdwr_fasync,
    };

    -static const struct file_operations read_pipe_fops = {
    - .llseek = no_llseek,
    - .read = do_sync_read,
    - .aio_read = pipe_read,
    - .write = bad_pipe_w,
    - .poll = pipe_poll,
    - .unlocked_ioctl = pipe_ioctl,
    - .open = pipe_read_open,
    - .release = pipe_read_release,
    - .fasync = pipe_read_fasync,
    -};
    -
    -static const struct file_operations write_pipe_fops = {
    - .llseek = no_llseek,
    - .read = bad_pipe_r,
    - .write = do_sync_write,
    - .aio_write = pipe_write,
    - .poll = pipe_poll,
    - .unlocked_ioctl = pipe_ioctl,
    - .open = pipe_write_open,
    - .release = pipe_write_release,
    - .fasync = pipe_write_fasync,
    -};
    -
    -static const struct file_operations rdwr_pipe_fops = {
    - .llseek = no_llseek,
    - .read = do_sync_read,
    - .aio_read = pipe_read,
    - .write = do_sync_write,
    - .aio_write = pipe_write,
    - .poll = pipe_poll,
    - .unlocked_ioctl = pipe_ioctl,
    - .open = pipe_rdwr_open,
    - .release = pipe_rdwr_release,
    - .fasync = pipe_rdwr_fasync,
    -};
    -
    struct pipe_inode_info * alloc_pipe_info(struct inode *inode)
    {
    struct pipe_inode_info *pipe;
    @@ -927,7 +892,7 @@
    inode->i_pipe = pipe;

    pipe->readers = pipe->writers = 1;
    - inode->i_fop = &rdwr_pipe_fops;
    + inode->i_fop = &rdwr_fifo_fops;

    /*
    * Mark the inode dirty from the very beginning,
    @@ -978,7 +943,7 @@
    d_instantiate(dentry, inode);

    err = -ENFILE;
    - f = alloc_file(pipe_mnt, dentry, FMODE_WRITE, &write_pipe_fops);
    + f = alloc_file(pipe_mnt, dentry, FMODE_WRITE, &write_fifo_fops);
    if (!f)
    goto err_dentry;
    f->f_mapping = inode->i_mapping;
    @@ -1021,7 +986,7 @@

    f->f_pos = 0;
    f->f_flags = O_RDONLY;
    - f->f_op = &read_pipe_fops;
    + f->f_op = &read_fifo_fops;
    f->f_mode = FMODE_READ;
    f->f_version = 0;


    \
     
     \ /
      Last update: 2008-07-01 10:07    [W:0.044 / U:0.276 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site