diff options
Diffstat (limited to 'fs/ubifs')
-rw-r--r-- | fs/ubifs/file.c | 21 | ||||
-rw-r--r-- | fs/ubifs/ubifs.h | 2 |
2 files changed, 12 insertions, 11 deletions
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 5e7fccfc4b29..89ef9a2f7837 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -1304,7 +1304,7 @@ static void *ubifs_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
1304 | return NULL; | 1304 | return NULL; |
1305 | } | 1305 | } |
1306 | 1306 | ||
1307 | int ubifs_fsync(struct file *file, int datasync) | 1307 | int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
1308 | { | 1308 | { |
1309 | struct inode *inode = file->f_mapping->host; | 1309 | struct inode *inode = file->f_mapping->host; |
1310 | struct ubifs_info *c = inode->i_sb->s_fs_info; | 1310 | struct ubifs_info *c = inode->i_sb->s_fs_info; |
@@ -1319,14 +1319,16 @@ int ubifs_fsync(struct file *file, int datasync) | |||
1319 | */ | 1319 | */ |
1320 | return 0; | 1320 | return 0; |
1321 | 1321 | ||
1322 | /* | 1322 | err = filemap_write_and_wait_range(inode->i_mapping, start, end); |
1323 | * VFS has already synchronized dirty pages for this inode. Synchronize | 1323 | if (err) |
1324 | * the inode unless this is a 'datasync()' call. | 1324 | return err; |
1325 | */ | 1325 | mutex_lock(&inode->i_mutex); |
1326 | |||
1327 | /* Synchronize the inode unless this is a 'datasync()' call. */ | ||
1326 | if (!datasync || (inode->i_state & I_DIRTY_DATASYNC)) { | 1328 | if (!datasync || (inode->i_state & I_DIRTY_DATASYNC)) { |
1327 | err = inode->i_sb->s_op->write_inode(inode, NULL); | 1329 | err = inode->i_sb->s_op->write_inode(inode, NULL); |
1328 | if (err) | 1330 | if (err) |
1329 | return err; | 1331 | goto out; |
1330 | } | 1332 | } |
1331 | 1333 | ||
1332 | /* | 1334 | /* |
@@ -1334,10 +1336,9 @@ int ubifs_fsync(struct file *file, int datasync) | |||
1334 | * them. | 1336 | * them. |
1335 | */ | 1337 | */ |
1336 | err = ubifs_sync_wbufs_by_inode(c, inode); | 1338 | err = ubifs_sync_wbufs_by_inode(c, inode); |
1337 | if (err) | 1339 | out: |
1338 | return err; | 1340 | mutex_unlock(&inode->i_mutex); |
1339 | 1341 | return err; | |
1340 | return 0; | ||
1341 | } | 1342 | } |
1342 | 1343 | ||
1343 | /** | 1344 | /** |
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index f79983d6f860..4cd648501fa4 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -1720,7 +1720,7 @@ const struct ubifs_lprops *ubifs_fast_find_frdi_idx(struct ubifs_info *c); | |||
1720 | int ubifs_calc_dark(const struct ubifs_info *c, int spc); | 1720 | int ubifs_calc_dark(const struct ubifs_info *c, int spc); |
1721 | 1721 | ||
1722 | /* file.c */ | 1722 | /* file.c */ |
1723 | int ubifs_fsync(struct file *file, int datasync); | 1723 | int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync); |
1724 | int ubifs_setattr(struct dentry *dentry, struct iattr *attr); | 1724 | int ubifs_setattr(struct dentry *dentry, struct iattr *attr); |
1725 | 1725 | ||
1726 | /* dir.c */ | 1726 | /* dir.c */ |