----- Original Message -----
| From: Jeff Layton <jlay...@redhat.com>
| 
| Some filesystem fsync routines will need these.
| 
| Signed-off-by: Jeff Layton <jlay...@redhat.com>
| ---
|  include/linux/fs.h |  7 ++++++-
|  mm/filemap.c       | 56
|  ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|  2 files changed, 62 insertions(+), 1 deletion(-)
(snip)
| diff --git a/mm/filemap.c b/mm/filemap.c
| index 72e46e6f0d9a..b904a8dfa43d 100644
| --- a/mm/filemap.c
| +++ b/mm/filemap.c
(snip)
| @@ -675,6 +698,39 @@ int file_write_and_wait_range(struct file *file, loff_t
| lstart, loff_t lend)
|  EXPORT_SYMBOL(file_write_and_wait_range);
|  
|  /**
| + * file_write_and_wait - write out whole file and wait on it and return any
| + *                    writeback errors since we last checked
| + * @file: file to write back and wait on
| + *
| + * Write back the whole file and wait on its mapping. Afterward, check for
| + * errors that may have occurred since our file->f_wb_err cursor was last
| + * updated.
| + */
| +int file_write_and_wait(struct file *file)
| +{
| +     int err = 0, err2;
| +     struct address_space *mapping = file->f_mapping;
| +
| +     if ((!dax_mapping(mapping) && mapping->nrpages) ||
| +         (dax_mapping(mapping) && mapping->nrexceptional)) {

Seems like we should make the new function mapping_needs_writeback more
central (mm.h or fs.h?) and call it here ^.

| +             err = filemap_fdatawrite(mapping);
| +             /* See comment of filemap_write_and_wait() */
| +             if (err != -EIO) {
| +                     loff_t i_size = i_size_read(mapping->host);
| +
| +                     if (i_size != 0)
| +                             __filemap_fdatawait_range(mapping, 0,
| +                                                       i_size - 1);
| +             }
| +     }
| +     err2 = file_check_and_advance_wb_err(file);
| +     if (!err)
| +             err = err2;
| +     return err;

In the past, I've seen more elegant constructs like:
        return (err ? err : err2);
but I don't know what's considered more ugly or hackish.

Regards,

Bob Peterson
Red Hat File Systems

Reply via email to