lkml.org 
[lkml]   [2009]   [Aug]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 16/17] fat: Opencode sync_page_range_nolock()
    Date
    fat_cont_expand() is the only user of sync_page_range_nolock(). It's also the
    only user of generic_osync_inode() which does not have a file open. So
    opencode needed actions for FAT so that we can convert generic_osync_inode() to
    a standard syncing path.

    Update a comment about generic_osync_inode().

    CC: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    Signed-off-by: Jan Kara <jack@suse.cz>
    ---
    fs/fat/file.c | 22 ++++++++++++++++++++--
    fs/fat/misc.c | 4 ++--
    2 files changed, 22 insertions(+), 4 deletions(-)

    diff --git a/fs/fat/file.c b/fs/fat/file.c
    index f042b96..e8c159d 100644
    --- a/fs/fat/file.c
    +++ b/fs/fat/file.c
    @@ -176,8 +176,26 @@ static int fat_cont_expand(struct inode *inode, loff_t size)

    inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;
    mark_inode_dirty(inode);
    - if (IS_SYNC(inode))
    - err = sync_page_range_nolock(inode, mapping, start, count);
    + if (IS_SYNC(inode)) {
    + int err2;
    +
    + /*
    + * Opencode syncing since we don't have a file open to use
    + * standard fsync path.
    + */
    + err = filemap_fdatawrite_range(mapping, start,
    + start + count - 1);
    + err2 = sync_mapping_buffers(mapping);
    + if (!err)
    + err = err2;
    + err2 = write_inode_now(inode, 1);
    + if (!err)
    + err = err2;
    + if (!err) {
    + err = filemap_fdatawait_range(mapping, start,
    + start + count - 1);
    + }
    + }
    out:
    return err;
    }
    diff --git a/fs/fat/misc.c b/fs/fat/misc.c
    index a6c2047..4e35be8 100644
    --- a/fs/fat/misc.c
    +++ b/fs/fat/misc.c
    @@ -119,8 +119,8 @@ int fat_chain_add(struct inode *inode, int new_dclus, int nr_cluster)
    MSDOS_I(inode)->i_start = new_dclus;
    MSDOS_I(inode)->i_logstart = new_dclus;
    /*
    - * Since generic_osync_inode() synchronize later if
    - * this is not directory, we don't here.
    + * Since generic_write_sync() synchronizes regular files later,
    + * we sync here only directories.
    */
    if (S_ISDIR(inode->i_mode) && IS_DIRSYNC(inode)) {
    ret = fat_sync_inode(inode);
    --
    1.6.0.2


    \
     
     \ /
      Last update: 2009-08-21 19:33    [W:0.022 / U:1.400 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site