Commit 2f3d675bcd4a84251d6e8eea8096ec8fc795e5d6

Authored by Jan Kara
1 parent aa3caafe53

fat: Opencode sync_page_range_nolock()

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>

Showing 2 changed files with 22 additions and 4 deletions Side-by-side Diff

... ... @@ -176,8 +176,26 @@
176 176  
177 177 inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;
178 178 mark_inode_dirty(inode);
179   - if (IS_SYNC(inode))
180   - err = sync_page_range_nolock(inode, mapping, start, count);
  179 + if (IS_SYNC(inode)) {
  180 + int err2;
  181 +
  182 + /*
  183 + * Opencode syncing since we don't have a file open to use
  184 + * standard fsync path.
  185 + */
  186 + err = filemap_fdatawrite_range(mapping, start,
  187 + start + count - 1);
  188 + err2 = sync_mapping_buffers(mapping);
  189 + if (!err)
  190 + err = err2;
  191 + err2 = write_inode_now(inode, 1);
  192 + if (!err)
  193 + err = err2;
  194 + if (!err) {
  195 + err = filemap_fdatawait_range(mapping, start,
  196 + start + count - 1);
  197 + }
  198 + }
181 199 out:
182 200 return err;
183 201 }
... ... @@ -119,8 +119,8 @@
119 119 MSDOS_I(inode)->i_start = new_dclus;
120 120 MSDOS_I(inode)->i_logstart = new_dclus;
121 121 /*
122   - * Since generic_osync_inode() synchronize later if
123   - * this is not directory, we don't here.
  122 + * Since generic_write_sync() synchronizes regular files later,
  123 + * we sync here only directories.
124 124 */
125 125 if (S_ISDIR(inode->i_mode) && IS_DIRSYNC(inode)) {
126 126 ret = fat_sync_inode(inode);