Re: Can O_SYNC be implemented by using fsync?

From: Jeff V. Merkey (jmerkey@timpanogas.com)
Date: Sat May 13 2000 - 13:46:41 EDT

  • Next message: Gerald Roth: "2.3.99-pre9-1 compilation error"

    I'm doing the same thing with fsync(). :-)

    Jeff

    Ulrich Kunitz wrote:
    >
    > Hi,
    >
    > this discusses item 5.1 in Alan's list of outstanding fixes before 2.4.
    >
    > I'm using fsync to write out all dirty pages/blocks of a file in
    > generic_file_write to get O_SYNC behaviour. Patch is included below. It
    > is the wrong way to do O_SYNC? I've checked this and it seems to do what
    > would be expected and it caused no harm to me.
    >
    > Another idea would be to use sync_page() in generic_file_write() that
    > calls block_sync_page() for ext2. block_sync_page() calls only
    > run_rask_queue(tq_disk). IMHO adding of sync_page_buffers() to
    > block_sync_page() would be required and there is still the inode and
    > superblock infos, that need to be written to disk before
    > generic_file_write() returns.
    >
    > Which kernel version did support O_SYNC for ext2? AFAIK 2.2 kernels
    > don't support O_SYNC.
    >
    > This is my patch:
    >
    > --- linux-2.3.99-pre8/mm/filemap.c Sat May 13 10:13:32 2000
    > +++ linux-2.3.99-pre8-uk1/mm/filemap.c Sat May 13 10:43:21 2000
    > @@ -39,6 +39,8 @@
    > * page-cache, 21.05.1999, Ingo Molnar <mingo@redhat.com>
    > *
    > * SMP-threaded pagemap-LRU 1999, Andrea Arcangeli <andrea@suse.de>
    > + *
    > + * O_SYNC support, 29. 4. 2000, Ulrich Kunitz <gefm21@uumail,de>
    > */
    >
    > atomic_t page_cache_size = ATOMIC_INIT(0);
    > @@ -2521,7 +2523,14 @@
    > if (cached_page)
    > page_cache_free(cached_page);
    >
    > + if ((file->f_flags & O_SYNC) && file->f_op && file->f_op->fsync) {
    > + err = file->f_op->fsync(file, file->f_dentry);
    > + if (err < 0)
    > + status = err;
    > + }
    > +
    > err = written ? written : status;
    > +
    > out:
    > up(&inode->i_sem);
    > return err;
    >
    > Ciao,
    >
    > Uli Kunitz
    >
    > --
    > Ulrich Kunitz (gefm21@uumail.de)
    >
    > -
    > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    > the body of a message to majordomo@vger.rutgers.edu
    > Please read the FAQ at http://www.tux.org/lkml/

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu
    Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Sat May 13 2000 - 14:00:00 EDT