diff options
Diffstat (limited to 'fs')
55 files changed, 106 insertions, 127 deletions
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 25b300e1c9d7..2bedc6c94fc2 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c | |||
@@ -257,15 +257,13 @@ v9fs_file_write(struct file *filp, const char __user * data, | |||
257 | return total; | 257 | return total; |
258 | } | 258 | } |
259 | 259 | ||
260 | static int v9fs_file_fsync(struct file *filp, struct dentry *dentry, | 260 | static int v9fs_file_fsync(struct file *filp, int datasync) |
261 | int datasync) | ||
262 | { | 261 | { |
263 | struct p9_fid *fid; | 262 | struct p9_fid *fid; |
264 | struct p9_wstat wstat; | 263 | struct p9_wstat wstat; |
265 | int retval; | 264 | int retval; |
266 | 265 | ||
267 | P9_DPRINTK(P9_DEBUG_VFS, "filp %p dentry %p datasync %x\n", filp, | 266 | P9_DPRINTK(P9_DEBUG_VFS, "filp %p datasync %x\n", filp, datasync); |
268 | dentry, datasync); | ||
269 | 267 | ||
270 | fid = filp->private_data; | 268 | fid = filp->private_data; |
271 | v9fs_blank_wstat(&wstat); | 269 | v9fs_blank_wstat(&wstat); |
diff --git a/fs/affs/affs.h b/fs/affs/affs.h index 861dae68ac12..f05b6155ccc8 100644 --- a/fs/affs/affs.h +++ b/fs/affs/affs.h | |||
@@ -183,7 +183,7 @@ extern int affs_add_entry(struct inode *dir, struct inode *inode, struct dent | |||
183 | 183 | ||
184 | void affs_free_prealloc(struct inode *inode); | 184 | void affs_free_prealloc(struct inode *inode); |
185 | extern void affs_truncate(struct inode *); | 185 | extern void affs_truncate(struct inode *); |
186 | int affs_file_fsync(struct file *, struct dentry *, int); | 186 | int affs_file_fsync(struct file *, int); |
187 | 187 | ||
188 | /* dir.c */ | 188 | /* dir.c */ |
189 | 189 | ||
diff --git a/fs/affs/file.c b/fs/affs/file.c index 184e55c1c9ba..322710c3eedf 100644 --- a/fs/affs/file.c +++ b/fs/affs/file.c | |||
@@ -916,9 +916,9 @@ affs_truncate(struct inode *inode) | |||
916 | affs_free_prealloc(inode); | 916 | affs_free_prealloc(inode); |
917 | } | 917 | } |
918 | 918 | ||
919 | int affs_file_fsync(struct file *filp, struct dentry *dentry, int datasync) | 919 | int affs_file_fsync(struct file *filp, int datasync) |
920 | { | 920 | { |
921 | struct inode * inode = dentry->d_inode; | 921 | struct inode *inode = filp->f_mapping->host; |
922 | int ret, err; | 922 | int ret, err; |
923 | 923 | ||
924 | ret = write_inode_now(inode, 0); | 924 | ret = write_inode_now(inode, 0); |
diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 807f284cc75e..5f679b77ce24 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h | |||
@@ -740,7 +740,7 @@ extern void afs_pages_written_back(struct afs_vnode *, struct afs_call *); | |||
740 | extern ssize_t afs_file_write(struct kiocb *, const struct iovec *, | 740 | extern ssize_t afs_file_write(struct kiocb *, const struct iovec *, |
741 | unsigned long, loff_t); | 741 | unsigned long, loff_t); |
742 | extern int afs_writeback_all(struct afs_vnode *); | 742 | extern int afs_writeback_all(struct afs_vnode *); |
743 | extern int afs_fsync(struct file *, struct dentry *, int); | 743 | extern int afs_fsync(struct file *, int); |
744 | 744 | ||
745 | 745 | ||
746 | /*****************************************************************************/ | 746 | /*****************************************************************************/ |
diff --git a/fs/afs/write.c b/fs/afs/write.c index 3bed54a294d4..3dab9e9948d0 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c | |||
@@ -701,8 +701,9 @@ int afs_writeback_all(struct afs_vnode *vnode) | |||
701 | * - the return status from this call provides a reliable indication of | 701 | * - the return status from this call provides a reliable indication of |
702 | * whether any write errors occurred for this process. | 702 | * whether any write errors occurred for this process. |
703 | */ | 703 | */ |
704 | int afs_fsync(struct file *file, struct dentry *dentry, int datasync) | 704 | int afs_fsync(struct file *file, int datasync) |
705 | { | 705 | { |
706 | struct dentry *dentry = file->f_path.dentry; | ||
706 | struct afs_writeback *wb, *xwb; | 707 | struct afs_writeback *wb, *xwb; |
707 | struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode); | 708 | struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode); |
708 | int ret; | 709 | int ret; |
diff --git a/fs/bad_inode.c b/fs/bad_inode.c index a05287a23f62..52e59bf4aa5f 100644 --- a/fs/bad_inode.c +++ b/fs/bad_inode.c | |||
@@ -93,8 +93,7 @@ static int bad_file_release(struct inode *inode, struct file *filp) | |||
93 | return -EIO; | 93 | return -EIO; |
94 | } | 94 | } |
95 | 95 | ||
96 | static int bad_file_fsync(struct file *file, struct dentry *dentry, | 96 | static int bad_file_fsync(struct file *file, int datasync) |
97 | int datasync) | ||
98 | { | 97 | { |
99 | return -EIO; | 98 | return -EIO; |
100 | } | 99 | } |
diff --git a/fs/block_dev.c b/fs/block_dev.c index 26e5f5026620..d0b37e626a1a 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -358,12 +358,7 @@ static loff_t block_llseek(struct file *file, loff_t offset, int origin) | |||
358 | return retval; | 358 | return retval; |
359 | } | 359 | } |
360 | 360 | ||
361 | /* | 361 | int blkdev_fsync(struct file *filp, int datasync) |
362 | * Filp is never NULL; the only case when ->fsync() is called with | ||
363 | * NULL first argument is nfsd_sync_dir() and that's not a directory. | ||
364 | */ | ||
365 | |||
366 | int blkdev_fsync(struct file *filp, struct dentry *dentry, int datasync) | ||
367 | { | 362 | { |
368 | struct inode *bd_inode = filp->f_mapping->host; | 363 | struct inode *bd_inode = filp->f_mapping->host; |
369 | struct block_device *bdev = I_BDEV(bd_inode); | 364 | struct block_device *bdev = I_BDEV(bd_inode); |
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index e9bf86415e86..29c20092847e 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -2434,7 +2434,7 @@ void btrfs_update_iflags(struct inode *inode); | |||
2434 | void btrfs_inherit_iflags(struct inode *inode, struct inode *dir); | 2434 | void btrfs_inherit_iflags(struct inode *inode, struct inode *dir); |
2435 | 2435 | ||
2436 | /* file.c */ | 2436 | /* file.c */ |
2437 | int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync); | 2437 | int btrfs_sync_file(struct file *file, int datasync); |
2438 | int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, | 2438 | int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, |
2439 | int skip_pinned); | 2439 | int skip_pinned); |
2440 | int btrfs_check_file(struct btrfs_root *root, struct inode *inode); | 2440 | int btrfs_check_file(struct btrfs_root *root, struct inode *inode); |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 79437c5eeb1e..787b50a16a14 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -1101,8 +1101,9 @@ int btrfs_release_file(struct inode *inode, struct file *filp) | |||
1101 | * important optimization for directories because holding the mutex prevents | 1101 | * important optimization for directories because holding the mutex prevents |
1102 | * new operations on the dir while we write to disk. | 1102 | * new operations on the dir while we write to disk. |
1103 | */ | 1103 | */ |
1104 | int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | 1104 | int btrfs_sync_file(struct file *file, int datasync) |
1105 | { | 1105 | { |
1106 | struct dentry *dentry = file->f_path.dentry; | ||
1106 | struct inode *inode = dentry->d_inode; | 1107 | struct inode *inode = dentry->d_inode; |
1107 | struct btrfs_root *root = BTRFS_I(inode)->root; | 1108 | struct btrfs_root *root = BTRFS_I(inode)->root; |
1108 | int ret = 0; | 1109 | int ret = 0; |
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 0dd0b81e64f7..ae3e3a306445 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
@@ -1776,9 +1776,9 @@ out: | |||
1776 | spin_unlock(&ci->i_unsafe_lock); | 1776 | spin_unlock(&ci->i_unsafe_lock); |
1777 | } | 1777 | } |
1778 | 1778 | ||
1779 | int ceph_fsync(struct file *file, struct dentry *dentry, int datasync) | 1779 | int ceph_fsync(struct file *file, int datasync) |
1780 | { | 1780 | { |
1781 | struct inode *inode = dentry->d_inode; | 1781 | struct inode *inode = file->f_mapping->host; |
1782 | struct ceph_inode_info *ci = ceph_inode(inode); | 1782 | struct ceph_inode_info *ci = ceph_inode(inode); |
1783 | unsigned flush_tid; | 1783 | unsigned flush_tid; |
1784 | int ret; | 1784 | int ret; |
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 4fd30900eff7..0057f4a07347 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c | |||
@@ -1107,10 +1107,9 @@ static ssize_t ceph_read_dir(struct file *file, char __user *buf, size_t size, | |||
1107 | * an fsync() on a dir will wait for any uncommitted directory | 1107 | * an fsync() on a dir will wait for any uncommitted directory |
1108 | * operations to commit. | 1108 | * operations to commit. |
1109 | */ | 1109 | */ |
1110 | static int ceph_dir_fsync(struct file *file, struct dentry *dentry, | 1110 | static int ceph_dir_fsync(struct file *file, int datasync) |
1111 | int datasync) | ||
1112 | { | 1111 | { |
1113 | struct inode *inode = dentry->d_inode; | 1112 | struct inode *inode = file->f_path.dentry->d_inode; |
1114 | struct ceph_inode_info *ci = ceph_inode(inode); | 1113 | struct ceph_inode_info *ci = ceph_inode(inode); |
1115 | struct list_head *head = &ci->i_unsafe_dirops; | 1114 | struct list_head *head = &ci->i_unsafe_dirops; |
1116 | struct ceph_mds_request *req; | 1115 | struct ceph_mds_request *req; |
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 3725c9ee9d08..dd1e7add656b 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h | |||
@@ -811,7 +811,7 @@ extern void ceph_put_cap(struct ceph_cap *cap); | |||
811 | 811 | ||
812 | extern void ceph_queue_caps_release(struct inode *inode); | 812 | extern void ceph_queue_caps_release(struct inode *inode); |
813 | extern int ceph_write_inode(struct inode *inode, struct writeback_control *wbc); | 813 | extern int ceph_write_inode(struct inode *inode, struct writeback_control *wbc); |
814 | extern int ceph_fsync(struct file *file, struct dentry *dentry, int datasync); | 814 | extern int ceph_fsync(struct file *file, int datasync); |
815 | extern void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, | 815 | extern void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, |
816 | struct ceph_mds_session *session); | 816 | struct ceph_mds_session *session); |
817 | extern int ceph_get_cap_mds(struct inode *inode); | 817 | extern int ceph_get_cap_mds(struct inode *inode); |
diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index 0242ff9cbf41..a7eb65c84b1c 100644 --- a/fs/cifs/cifsfs.h +++ b/fs/cifs/cifsfs.h | |||
@@ -84,7 +84,7 @@ extern ssize_t cifs_user_read(struct file *file, char __user *read_data, | |||
84 | extern ssize_t cifs_user_write(struct file *file, const char __user *write_data, | 84 | extern ssize_t cifs_user_write(struct file *file, const char __user *write_data, |
85 | size_t write_size, loff_t *poffset); | 85 | size_t write_size, loff_t *poffset); |
86 | extern int cifs_lock(struct file *, int, struct file_lock *); | 86 | extern int cifs_lock(struct file *, int, struct file_lock *); |
87 | extern int cifs_fsync(struct file *, struct dentry *, int); | 87 | extern int cifs_fsync(struct file *, int); |
88 | extern int cifs_flush(struct file *, fl_owner_t id); | 88 | extern int cifs_flush(struct file *, fl_owner_t id); |
89 | extern int cifs_file_mmap(struct file * , struct vm_area_struct *); | 89 | extern int cifs_file_mmap(struct file * , struct vm_area_struct *); |
90 | extern const struct file_operations cifs_dir_ops; | 90 | extern const struct file_operations cifs_dir_ops; |
diff --git a/fs/cifs/file.c b/fs/cifs/file.c index a83541ec9713..f1ff785b2292 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
@@ -1676,7 +1676,7 @@ static int cifs_write_end(struct file *file, struct address_space *mapping, | |||
1676 | return rc; | 1676 | return rc; |
1677 | } | 1677 | } |
1678 | 1678 | ||
1679 | int cifs_fsync(struct file *file, struct dentry *dentry, int datasync) | 1679 | int cifs_fsync(struct file *file, int datasync) |
1680 | { | 1680 | { |
1681 | int xid; | 1681 | int xid; |
1682 | int rc = 0; | 1682 | int rc = 0; |
@@ -1688,7 +1688,7 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync) | |||
1688 | xid = GetXid(); | 1688 | xid = GetXid(); |
1689 | 1689 | ||
1690 | cFYI(1, "Sync file - name: %s datasync: 0x%x", | 1690 | cFYI(1, "Sync file - name: %s datasync: 0x%x", |
1691 | dentry->d_name.name, datasync); | 1691 | file->f_path.dentry->d_name.name, datasync); |
1692 | 1692 | ||
1693 | rc = filemap_write_and_wait(inode->i_mapping); | 1693 | rc = filemap_write_and_wait(inode->i_mapping); |
1694 | if (rc == 0) { | 1694 | if (rc == 0) { |
diff --git a/fs/coda/coda_int.h b/fs/coda/coda_int.h index d99860a33890..6b443ff43a19 100644 --- a/fs/coda/coda_int.h +++ b/fs/coda/coda_int.h | |||
@@ -11,8 +11,7 @@ extern int coda_fake_statfs; | |||
11 | 11 | ||
12 | void coda_destroy_inodecache(void); | 12 | void coda_destroy_inodecache(void); |
13 | int coda_init_inodecache(void); | 13 | int coda_init_inodecache(void); |
14 | int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, | 14 | int coda_fsync(struct file *coda_file, int datasync); |
15 | int datasync); | ||
16 | void coda_sysctl_init(void); | 15 | void coda_sysctl_init(void); |
17 | void coda_sysctl_clean(void); | 16 | void coda_sysctl_clean(void); |
18 | 17 | ||
diff --git a/fs/coda/file.c b/fs/coda/file.c index 7196077b1688..ad3cd2abeeb4 100644 --- a/fs/coda/file.c +++ b/fs/coda/file.c | |||
@@ -202,10 +202,10 @@ int coda_release(struct inode *coda_inode, struct file *coda_file) | |||
202 | return 0; | 202 | return 0; |
203 | } | 203 | } |
204 | 204 | ||
205 | int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) | 205 | int coda_fsync(struct file *coda_file, int datasync) |
206 | { | 206 | { |
207 | struct file *host_file; | 207 | struct file *host_file; |
208 | struct inode *coda_inode = coda_dentry->d_inode; | 208 | struct inode *coda_inode = coda_file->f_path.dentry->d_inode; |
209 | struct coda_file_info *cfi; | 209 | struct coda_file_info *cfi; |
210 | int err = 0; | 210 | int err = 0; |
211 | 211 | ||
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index 3bdddbcc785f..e8fcf4e2ed7d 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c | |||
@@ -274,7 +274,7 @@ static int ecryptfs_release(struct inode *inode, struct file *file) | |||
274 | } | 274 | } |
275 | 275 | ||
276 | static int | 276 | static int |
277 | ecryptfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 277 | ecryptfs_fsync(struct file *file, int datasync) |
278 | { | 278 | { |
279 | return vfs_fsync(ecryptfs_file_to_lower(file), datasync); | 279 | return vfs_fsync(ecryptfs_file_to_lower(file), datasync); |
280 | } | 280 | } |
diff --git a/fs/exofs/file.c b/fs/exofs/file.c index 839b9dc1e70f..fef6899be397 100644 --- a/fs/exofs/file.c +++ b/fs/exofs/file.c | |||
@@ -40,12 +40,11 @@ static int exofs_release_file(struct inode *inode, struct file *filp) | |||
40 | return 0; | 40 | return 0; |
41 | } | 41 | } |
42 | 42 | ||
43 | static int exofs_file_fsync(struct file *filp, struct dentry *dentry, | 43 | static int exofs_file_fsync(struct file *filp, int datasync) |
44 | int datasync) | ||
45 | { | 44 | { |
46 | int ret; | 45 | int ret; |
47 | struct address_space *mapping = filp->f_mapping; | 46 | struct address_space *mapping = filp->f_mapping; |
48 | struct inode *inode = dentry->d_inode; | 47 | struct inode *inode = mapping->host; |
49 | struct super_block *sb; | 48 | struct super_block *sb; |
50 | 49 | ||
51 | ret = filemap_write_and_wait(mapping); | 50 | ret = filemap_write_and_wait(mapping); |
@@ -66,7 +65,7 @@ static int exofs_file_fsync(struct file *filp, struct dentry *dentry, | |||
66 | 65 | ||
67 | static int exofs_flush(struct file *file, fl_owner_t id) | 66 | static int exofs_flush(struct file *file, fl_owner_t id) |
68 | { | 67 | { |
69 | exofs_file_fsync(file, file->f_path.dentry, 1); | 68 | exofs_file_fsync(file, 1); |
70 | /* TODO: Flush the OSD target */ | 69 | /* TODO: Flush the OSD target */ |
71 | return 0; | 70 | return 0; |
72 | } | 71 | } |
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index 0b038e47ad2f..8e917b686510 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h | |||
@@ -155,7 +155,7 @@ extern void ext2_write_super (struct super_block *); | |||
155 | extern const struct file_operations ext2_dir_operations; | 155 | extern const struct file_operations ext2_dir_operations; |
156 | 156 | ||
157 | /* file.c */ | 157 | /* file.c */ |
158 | extern int ext2_fsync(struct file *file, struct dentry *dentry, int datasync); | 158 | extern int ext2_fsync(struct file *file, int datasync); |
159 | extern const struct inode_operations ext2_file_inode_operations; | 159 | extern const struct inode_operations ext2_file_inode_operations; |
160 | extern const struct file_operations ext2_file_operations; | 160 | extern const struct file_operations ext2_file_operations; |
161 | extern const struct file_operations ext2_xip_file_operations; | 161 | extern const struct file_operations ext2_xip_file_operations; |
diff --git a/fs/ext2/file.c b/fs/ext2/file.c index 5d198d0697fb..48bcfc327014 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c | |||
@@ -40,13 +40,13 @@ static int ext2_release_file (struct inode * inode, struct file * filp) | |||
40 | return 0; | 40 | return 0; |
41 | } | 41 | } |
42 | 42 | ||
43 | int ext2_fsync(struct file *file, struct dentry *dentry, int datasync) | 43 | int ext2_fsync(struct file *file, int datasync) |
44 | { | 44 | { |
45 | int ret; | 45 | int ret; |
46 | struct super_block *sb = dentry->d_inode->i_sb; | 46 | struct super_block *sb = file->f_mapping->host->i_sb; |
47 | struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping; | 47 | struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping; |
48 | 48 | ||
49 | ret = simple_fsync(file, dentry, datasync); | 49 | ret = simple_fsync(file, datasync); |
50 | if (ret == -EIO || test_and_clear_bit(AS_EIO, &mapping->flags)) { | 50 | if (ret == -EIO || test_and_clear_bit(AS_EIO, &mapping->flags)) { |
51 | /* We don't really know where the IO error happened... */ | 51 | /* We don't really know where the IO error happened... */ |
52 | ext2_error(sb, __func__, | 52 | ext2_error(sb, __func__, |
diff --git a/fs/ext3/fsync.c b/fs/ext3/fsync.c index fcf7487734b6..d7e9f74dc3a6 100644 --- a/fs/ext3/fsync.c +++ b/fs/ext3/fsync.c | |||
@@ -43,9 +43,9 @@ | |||
43 | * inode to disk. | 43 | * inode to disk. |
44 | */ | 44 | */ |
45 | 45 | ||
46 | int ext3_sync_file(struct file * file, struct dentry *dentry, int datasync) | 46 | int ext3_sync_file(struct file *file, int datasync) |
47 | { | 47 | { |
48 | struct inode *inode = dentry->d_inode; | 48 | struct inode *inode = file->f_mapping->host; |
49 | struct ext3_inode_info *ei = EXT3_I(inode); | 49 | struct ext3_inode_info *ei = EXT3_I(inode); |
50 | journal_t *journal = EXT3_SB(inode->i_sb)->s_journal; | 50 | journal_t *journal = EXT3_SB(inode->i_sb)->s_journal; |
51 | int ret, needs_barrier = 0; | 51 | int ret, needs_barrier = 0; |
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 60bd31026e7c..19a4de57128a 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -1519,7 +1519,7 @@ extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash, | |||
1519 | extern void ext4_htree_free_dir_info(struct dir_private_info *p); | 1519 | extern void ext4_htree_free_dir_info(struct dir_private_info *p); |
1520 | 1520 | ||
1521 | /* fsync.c */ | 1521 | /* fsync.c */ |
1522 | extern int ext4_sync_file(struct file *, struct dentry *, int); | 1522 | extern int ext4_sync_file(struct file *, int); |
1523 | 1523 | ||
1524 | /* hash.c */ | 1524 | /* hash.c */ |
1525 | extern int ext4fs_dirhash(const char *name, int len, struct | 1525 | extern int ext4fs_dirhash(const char *name, int len, struct |
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index b6a74f991bf4..40f345201737 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c | |||
@@ -71,9 +71,9 @@ static void ext4_sync_parent(struct inode *inode) | |||
71 | * i_mutex lock is held when entering and exiting this function | 71 | * i_mutex lock is held when entering and exiting this function |
72 | */ | 72 | */ |
73 | 73 | ||
74 | int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync) | 74 | int ext4_sync_file(struct file *file, int datasync) |
75 | { | 75 | { |
76 | struct inode *inode = dentry->d_inode; | 76 | struct inode *inode = file->f_mapping->host; |
77 | struct ext4_inode_info *ei = EXT4_I(inode); | 77 | struct ext4_inode_info *ei = EXT4_I(inode); |
78 | journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; | 78 | journal_t *journal = EXT4_SB(inode->i_sb)->s_journal; |
79 | int ret; | 79 | int ret; |
@@ -81,7 +81,7 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
81 | 81 | ||
82 | J_ASSERT(ext4_journal_current_handle() == NULL); | 82 | J_ASSERT(ext4_journal_current_handle() == NULL); |
83 | 83 | ||
84 | trace_ext4_sync_file(file, dentry, datasync); | 84 | trace_ext4_sync_file(file, datasync); |
85 | 85 | ||
86 | if (inode->i_sb->s_flags & MS_RDONLY) | 86 | if (inode->i_sb->s_flags & MS_RDONLY) |
87 | return 0; | 87 | return 0; |
@@ -91,7 +91,7 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
91 | return ret; | 91 | return ret; |
92 | 92 | ||
93 | if (!journal) { | 93 | if (!journal) { |
94 | ret = simple_fsync(file, dentry, datasync); | 94 | ret = simple_fsync(file, datasync); |
95 | if (!ret && !list_empty(&inode->i_dentry)) | 95 | if (!ret && !list_empty(&inode->i_dentry)) |
96 | ext4_sync_parent(inode); | 96 | ext4_sync_parent(inode); |
97 | return ret; | 97 | return ret; |
diff --git a/fs/fat/fat.h b/fs/fat/fat.h index 53dba57b49a1..a1c8c4b44fdb 100644 --- a/fs/fat/fat.h +++ b/fs/fat/fat.h | |||
@@ -309,8 +309,7 @@ extern int fat_setattr(struct dentry * dentry, struct iattr * attr); | |||
309 | extern void fat_truncate(struct inode *inode); | 309 | extern void fat_truncate(struct inode *inode); |
310 | extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, | 310 | extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry, |
311 | struct kstat *stat); | 311 | struct kstat *stat); |
312 | extern int fat_file_fsync(struct file *file, struct dentry *dentry, | 312 | extern int fat_file_fsync(struct file *file, int datasync); |
313 | int datasync); | ||
314 | 313 | ||
315 | /* fat/inode.c */ | 314 | /* fat/inode.c */ |
316 | extern void fat_attach(struct inode *inode, loff_t i_pos); | 315 | extern void fat_attach(struct inode *inode, loff_t i_pos); |
diff --git a/fs/fat/file.c b/fs/fat/file.c index a14c2f6a489e..29a576944374 100644 --- a/fs/fat/file.c +++ b/fs/fat/file.c | |||
@@ -149,12 +149,12 @@ static int fat_file_release(struct inode *inode, struct file *filp) | |||
149 | return 0; | 149 | return 0; |
150 | } | 150 | } |
151 | 151 | ||
152 | int fat_file_fsync(struct file *filp, struct dentry *dentry, int datasync) | 152 | int fat_file_fsync(struct file *filp, int datasync) |
153 | { | 153 | { |
154 | struct inode *inode = dentry->d_inode; | 154 | struct inode *inode = filp->f_mapping->host; |
155 | int res, err; | 155 | int res, err; |
156 | 156 | ||
157 | res = simple_fsync(filp, dentry, datasync); | 157 | res = simple_fsync(filp, datasync); |
158 | err = sync_mapping_buffers(MSDOS_SB(inode->i_sb)->fat_inode->i_mapping); | 158 | err = sync_mapping_buffers(MSDOS_SB(inode->i_sb)->fat_inode->i_mapping); |
159 | 159 | ||
160 | return res ? res : err; | 160 | return res ? res : err; |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 4787ae6c5c1c..3cdc5f78a406 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
@@ -1156,10 +1156,9 @@ static int fuse_dir_release(struct inode *inode, struct file *file) | |||
1156 | return 0; | 1156 | return 0; |
1157 | } | 1157 | } |
1158 | 1158 | ||
1159 | static int fuse_dir_fsync(struct file *file, struct dentry *de, int datasync) | 1159 | static int fuse_dir_fsync(struct file *file, int datasync) |
1160 | { | 1160 | { |
1161 | /* nfsd can call this with no file */ | 1161 | return fuse_fsync_common(file, datasync, 1); |
1162 | return file ? fuse_fsync_common(file, de, datasync, 1) : 0; | ||
1163 | } | 1162 | } |
1164 | 1163 | ||
1165 | static bool update_mtime(unsigned ivalid) | 1164 | static bool update_mtime(unsigned ivalid) |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index a9f5e137f1d3..b5fd6f9905e4 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -351,10 +351,9 @@ static void fuse_sync_writes(struct inode *inode) | |||
351 | fuse_release_nowrite(inode); | 351 | fuse_release_nowrite(inode); |
352 | } | 352 | } |
353 | 353 | ||
354 | int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, | 354 | int fuse_fsync_common(struct file *file, int datasync, int isdir) |
355 | int isdir) | ||
356 | { | 355 | { |
357 | struct inode *inode = de->d_inode; | 356 | struct inode *inode = file->f_mapping->host; |
358 | struct fuse_conn *fc = get_fuse_conn(inode); | 357 | struct fuse_conn *fc = get_fuse_conn(inode); |
359 | struct fuse_file *ff = file->private_data; | 358 | struct fuse_file *ff = file->private_data; |
360 | struct fuse_req *req; | 359 | struct fuse_req *req; |
@@ -403,9 +402,9 @@ int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, | |||
403 | return err; | 402 | return err; |
404 | } | 403 | } |
405 | 404 | ||
406 | static int fuse_fsync(struct file *file, struct dentry *de, int datasync) | 405 | static int fuse_fsync(struct file *file, int datasync) |
407 | { | 406 | { |
408 | return fuse_fsync_common(file, de, datasync, 0); | 407 | return fuse_fsync_common(file, datasync, 0); |
409 | } | 408 | } |
410 | 409 | ||
411 | void fuse_read_fill(struct fuse_req *req, struct file *file, loff_t pos, | 410 | void fuse_read_fill(struct fuse_req *req, struct file *file, loff_t pos, |
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 01cc462ff45d..2c0d14a86779 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h | |||
@@ -568,8 +568,7 @@ void fuse_release_common(struct file *file, int opcode); | |||
568 | /** | 568 | /** |
569 | * Send FSYNC or FSYNCDIR request | 569 | * Send FSYNC or FSYNCDIR request |
570 | */ | 570 | */ |
571 | int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, | 571 | int fuse_fsync_common(struct file *file, int datasync, int isdir); |
572 | int isdir); | ||
573 | 572 | ||
574 | /** | 573 | /** |
575 | * Notify poll wakeup | 574 | * Notify poll wakeup |
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index b20bfcc9fa2d..ed9a94f0ef15 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c | |||
@@ -554,9 +554,9 @@ static int gfs2_close(struct inode *inode, struct file *file) | |||
554 | * Returns: errno | 554 | * Returns: errno |
555 | */ | 555 | */ |
556 | 556 | ||
557 | static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync) | 557 | static int gfs2_fsync(struct file *file, int datasync) |
558 | { | 558 | { |
559 | struct inode *inode = dentry->d_inode; | 559 | struct inode *inode = file->f_mapping->host; |
560 | int sync_state = inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC); | 560 | int sync_state = inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC); |
561 | int ret = 0; | 561 | int ret = 0; |
562 | 562 | ||
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 3a029d8f4cf1..87ac1891a185 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -411,9 +411,9 @@ int hostfs_file_open(struct inode *ino, struct file *file) | |||
411 | return 0; | 411 | return 0; |
412 | } | 412 | } |
413 | 413 | ||
414 | int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 414 | int hostfs_fsync(struct file *file, int datasync) |
415 | { | 415 | { |
416 | return fsync_file(HOSTFS_I(dentry->d_inode)->fd, datasync); | 416 | return fsync_file(HOSTFS_I(file->f_mapping->host)->fd, datasync); |
417 | } | 417 | } |
418 | 418 | ||
419 | static const struct file_operations hostfs_file_fops = { | 419 | static const struct file_operations hostfs_file_fops = { |
diff --git a/fs/hpfs/file.c b/fs/hpfs/file.c index 3efabff00367..a9ae9bfa752f 100644 --- a/fs/hpfs/file.c +++ b/fs/hpfs/file.c | |||
@@ -19,9 +19,9 @@ static int hpfs_file_release(struct inode *inode, struct file *file) | |||
19 | return 0; | 19 | return 0; |
20 | } | 20 | } |
21 | 21 | ||
22 | int hpfs_file_fsync(struct file *file, struct dentry *dentry, int datasync) | 22 | int hpfs_file_fsync(struct file *file, int datasync) |
23 | { | 23 | { |
24 | /*return file_fsync(file, dentry);*/ | 24 | /*return file_fsync(file, datasync);*/ |
25 | return 0; /* Don't fsync :-) */ | 25 | return 0; /* Don't fsync :-) */ |
26 | } | 26 | } |
27 | 27 | ||
diff --git a/fs/hpfs/hpfs_fn.h b/fs/hpfs/hpfs_fn.h index 97bf738cd5d6..75f9d4324851 100644 --- a/fs/hpfs/hpfs_fn.h +++ b/fs/hpfs/hpfs_fn.h | |||
@@ -268,7 +268,7 @@ void hpfs_set_ea(struct inode *, struct fnode *, const char *, | |||
268 | 268 | ||
269 | /* file.c */ | 269 | /* file.c */ |
270 | 270 | ||
271 | int hpfs_file_fsync(struct file *, struct dentry *, int); | 271 | int hpfs_file_fsync(struct file *, int); |
272 | extern const struct file_operations hpfs_file_ops; | 272 | extern const struct file_operations hpfs_file_ops; |
273 | extern const struct inode_operations hpfs_file_iops; | 273 | extern const struct inode_operations hpfs_file_iops; |
274 | extern const struct address_space_operations hpfs_aops; | 274 | extern const struct address_space_operations hpfs_aops; |
diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 2e4dfa8593da..826c3f9d29ac 100644 --- a/fs/hppfs/hppfs.c +++ b/fs/hppfs/hppfs.c | |||
@@ -587,7 +587,7 @@ static int hppfs_readdir(struct file *file, void *ent, filldir_t filldir) | |||
587 | return err; | 587 | return err; |
588 | } | 588 | } |
589 | 589 | ||
590 | static int hppfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 590 | static int hppfs_fsync(struct file *file, int datasync) |
591 | { | 591 | { |
592 | return 0; | 592 | return 0; |
593 | } | 593 | } |
diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c index e7291c161a19..813497024437 100644 --- a/fs/jffs2/file.c +++ b/fs/jffs2/file.c | |||
@@ -26,9 +26,9 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, | |||
26 | struct page **pagep, void **fsdata); | 26 | struct page **pagep, void **fsdata); |
27 | static int jffs2_readpage (struct file *filp, struct page *pg); | 27 | static int jffs2_readpage (struct file *filp, struct page *pg); |
28 | 28 | ||
29 | int jffs2_fsync(struct file *filp, struct dentry *dentry, int datasync) | 29 | int jffs2_fsync(struct file *filp, int datasync) |
30 | { | 30 | { |
31 | struct inode *inode = dentry->d_inode; | 31 | struct inode *inode = filp->f_mapping->host; |
32 | struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); | 32 | struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb); |
33 | 33 | ||
34 | /* Trigger GC to flush any pending writes for this inode */ | 34 | /* Trigger GC to flush any pending writes for this inode */ |
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h index 035a767f958b..4791aacf3084 100644 --- a/fs/jffs2/os-linux.h +++ b/fs/jffs2/os-linux.h | |||
@@ -158,7 +158,7 @@ extern const struct inode_operations jffs2_dir_inode_operations; | |||
158 | extern const struct file_operations jffs2_file_operations; | 158 | extern const struct file_operations jffs2_file_operations; |
159 | extern const struct inode_operations jffs2_file_inode_operations; | 159 | extern const struct inode_operations jffs2_file_inode_operations; |
160 | extern const struct address_space_operations jffs2_file_address_operations; | 160 | extern const struct address_space_operations jffs2_file_address_operations; |
161 | int jffs2_fsync(struct file *, struct dentry *, int); | 161 | int jffs2_fsync(struct file *, int); |
162 | int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg); | 162 | int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg); |
163 | 163 | ||
164 | /* ioctl.c */ | 164 | /* ioctl.c */ |
diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 85d9ec659225..127263cc8657 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
@@ -27,9 +27,9 @@ | |||
27 | #include "jfs_acl.h" | 27 | #include "jfs_acl.h" |
28 | #include "jfs_debug.h" | 28 | #include "jfs_debug.h" |
29 | 29 | ||
30 | int jfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 30 | int jfs_fsync(struct file *file, int datasync) |
31 | { | 31 | { |
32 | struct inode *inode = dentry->d_inode; | 32 | struct inode *inode = file->f_mapping->host; |
33 | int rc = 0; | 33 | int rc = 0; |
34 | 34 | ||
35 | if (!(inode->i_state & I_DIRTY) || | 35 | if (!(inode->i_state & I_DIRTY) || |
diff --git a/fs/jfs/jfs_inode.h b/fs/jfs/jfs_inode.h index 9e6bda30a6e8..11042b1f44b5 100644 --- a/fs/jfs/jfs_inode.h +++ b/fs/jfs/jfs_inode.h | |||
@@ -21,7 +21,7 @@ | |||
21 | struct fid; | 21 | struct fid; |
22 | 22 | ||
23 | extern struct inode *ialloc(struct inode *, umode_t); | 23 | extern struct inode *ialloc(struct inode *, umode_t); |
24 | extern int jfs_fsync(struct file *, struct dentry *, int); | 24 | extern int jfs_fsync(struct file *, int); |
25 | extern long jfs_ioctl(struct file *, unsigned int, unsigned long); | 25 | extern long jfs_ioctl(struct file *, unsigned int, unsigned long); |
26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); | 26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); |
27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); | 27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); |
diff --git a/fs/libfs.c b/fs/libfs.c index 232bea425b09..e57ea58bda68 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
@@ -58,7 +58,7 @@ struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, struct na | |||
58 | return NULL; | 58 | return NULL; |
59 | } | 59 | } |
60 | 60 | ||
61 | int simple_sync_file(struct file * file, struct dentry *dentry, int datasync) | 61 | int simple_sync_file(struct file *file, int datasync) |
62 | { | 62 | { |
63 | return 0; | 63 | return 0; |
64 | } | 64 | } |
@@ -851,13 +851,13 @@ struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid, | |||
851 | } | 851 | } |
852 | EXPORT_SYMBOL_GPL(generic_fh_to_parent); | 852 | EXPORT_SYMBOL_GPL(generic_fh_to_parent); |
853 | 853 | ||
854 | int simple_fsync(struct file *file, struct dentry *dentry, int datasync) | 854 | int simple_fsync(struct file *file, int datasync) |
855 | { | 855 | { |
856 | struct writeback_control wbc = { | 856 | struct writeback_control wbc = { |
857 | .sync_mode = WB_SYNC_ALL, | 857 | .sync_mode = WB_SYNC_ALL, |
858 | .nr_to_write = 0, /* metadata-only; caller takes care of data */ | 858 | .nr_to_write = 0, /* metadata-only; caller takes care of data */ |
859 | }; | 859 | }; |
860 | struct inode *inode = dentry->d_inode; | 860 | struct inode *inode = file->f_mapping->host; |
861 | int err; | 861 | int err; |
862 | int ret; | 862 | int ret; |
863 | 863 | ||
diff --git a/fs/logfs/file.c b/fs/logfs/file.c index 0de524071870..abe1cafbd4c2 100644 --- a/fs/logfs/file.c +++ b/fs/logfs/file.c | |||
@@ -219,9 +219,9 @@ int logfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
219 | } | 219 | } |
220 | } | 220 | } |
221 | 221 | ||
222 | int logfs_fsync(struct file *file, struct dentry *dentry, int datasync) | 222 | int logfs_fsync(struct file *file, int datasync) |
223 | { | 223 | { |
224 | struct super_block *sb = dentry->d_inode->i_sb; | 224 | struct super_block *sb = file->f_mapping->host->i_sb; |
225 | 225 | ||
226 | logfs_write_anchor(sb); | 226 | logfs_write_anchor(sb); |
227 | return 0; | 227 | return 0; |
diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index 1a9db84f8d8f..c838c4d72111 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h | |||
@@ -506,7 +506,7 @@ extern const struct address_space_operations logfs_reg_aops; | |||
506 | int logfs_readpage(struct file *file, struct page *page); | 506 | int logfs_readpage(struct file *file, struct page *page); |
507 | int logfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | 507 | int logfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, |
508 | unsigned long arg); | 508 | unsigned long arg); |
509 | int logfs_fsync(struct file *file, struct dentry *dentry, int datasync); | 509 | int logfs_fsync(struct file *file, int datasync); |
510 | 510 | ||
511 | /* gc.c */ | 511 | /* gc.c */ |
512 | u32 get_best_cand(struct super_block *sb, struct candidate_list *list, u32 *ec); | 512 | u32 get_best_cand(struct super_block *sb, struct candidate_list *list, u32 *ec); |
diff --git a/fs/ncpfs/file.c b/fs/ncpfs/file.c index b93870892892..3639cc5cbdae 100644 --- a/fs/ncpfs/file.c +++ b/fs/ncpfs/file.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/ncp_fs.h> | 22 | #include <linux/ncp_fs.h> |
23 | #include "ncplib_kernel.h" | 23 | #include "ncplib_kernel.h" |
24 | 24 | ||
25 | static int ncp_fsync(struct file *file, struct dentry *dentry, int datasync) | 25 | static int ncp_fsync(struct file *file, int datasync) |
26 | { | 26 | { |
27 | return 0; | 27 | return 0; |
28 | } | 28 | } |
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index db64854b7b09..782b431ef91c 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -53,7 +53,7 @@ static int nfs_link(struct dentry *, struct inode *, struct dentry *); | |||
53 | static int nfs_mknod(struct inode *, struct dentry *, int, dev_t); | 53 | static int nfs_mknod(struct inode *, struct dentry *, int, dev_t); |
54 | static int nfs_rename(struct inode *, struct dentry *, | 54 | static int nfs_rename(struct inode *, struct dentry *, |
55 | struct inode *, struct dentry *); | 55 | struct inode *, struct dentry *); |
56 | static int nfs_fsync_dir(struct file *, struct dentry *, int); | 56 | static int nfs_fsync_dir(struct file *, int); |
57 | static loff_t nfs_llseek_dir(struct file *, loff_t, int); | 57 | static loff_t nfs_llseek_dir(struct file *, loff_t, int); |
58 | 58 | ||
59 | const struct file_operations nfs_dir_operations = { | 59 | const struct file_operations nfs_dir_operations = { |
@@ -641,8 +641,10 @@ out: | |||
641 | * All directory operations under NFS are synchronous, so fsync() | 641 | * All directory operations under NFS are synchronous, so fsync() |
642 | * is a dummy operation. | 642 | * is a dummy operation. |
643 | */ | 643 | */ |
644 | static int nfs_fsync_dir(struct file *filp, struct dentry *dentry, int datasync) | 644 | static int nfs_fsync_dir(struct file *filp, int datasync) |
645 | { | 645 | { |
646 | struct dentry *dentry = filp->f_path.dentry; | ||
647 | |||
646 | dfprintk(FILE, "NFS: fsync dir(%s/%s) datasync %d\n", | 648 | dfprintk(FILE, "NFS: fsync dir(%s/%s) datasync %d\n", |
647 | dentry->d_parent->d_name.name, dentry->d_name.name, | 649 | dentry->d_parent->d_name.name, dentry->d_name.name, |
648 | datasync); | 650 | datasync); |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index cac96bcc91e4..36a5e74f51b4 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
@@ -53,7 +53,7 @@ static ssize_t nfs_file_splice_write(struct pipe_inode_info *pipe, | |||
53 | static ssize_t nfs_file_write(struct kiocb *, const struct iovec *iov, | 53 | static ssize_t nfs_file_write(struct kiocb *, const struct iovec *iov, |
54 | unsigned long nr_segs, loff_t pos); | 54 | unsigned long nr_segs, loff_t pos); |
55 | static int nfs_file_flush(struct file *, fl_owner_t id); | 55 | static int nfs_file_flush(struct file *, fl_owner_t id); |
56 | static int nfs_file_fsync(struct file *, struct dentry *dentry, int datasync); | 56 | static int nfs_file_fsync(struct file *, int datasync); |
57 | static int nfs_check_flags(int flags); | 57 | static int nfs_check_flags(int flags); |
58 | static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl); | 58 | static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl); |
59 | static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl); | 59 | static int nfs_flock(struct file *filp, int cmd, struct file_lock *fl); |
@@ -322,8 +322,9 @@ nfs_file_mmap(struct file * file, struct vm_area_struct * vma) | |||
322 | * whether any write errors occurred for this process. | 322 | * whether any write errors occurred for this process. |
323 | */ | 323 | */ |
324 | static int | 324 | static int |
325 | nfs_file_fsync(struct file *file, struct dentry *dentry, int datasync) | 325 | nfs_file_fsync(struct file *file, int datasync) |
326 | { | 326 | { |
327 | struct dentry *dentry = file->f_path.dentry; | ||
327 | struct nfs_open_context *ctx = nfs_file_open_context(file); | 328 | struct nfs_open_context *ctx = nfs_file_open_context(file); |
328 | struct inode *inode = dentry->d_inode; | 329 | struct inode *inode = dentry->d_inode; |
329 | 330 | ||
diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c index 30292df443ce..c9a30d7ff6fc 100644 --- a/fs/nilfs2/file.c +++ b/fs/nilfs2/file.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include "nilfs.h" | 27 | #include "nilfs.h" |
28 | #include "segment.h" | 28 | #include "segment.h" |
29 | 29 | ||
30 | int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | 30 | int nilfs_sync_file(struct file *file, int datasync) |
31 | { | 31 | { |
32 | /* | 32 | /* |
33 | * Called from fsync() system call | 33 | * Called from fsync() system call |
@@ -37,7 +37,7 @@ int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync) | |||
37 | * This function should be implemented when the writeback function | 37 | * This function should be implemented when the writeback function |
38 | * will be implemented. | 38 | * will be implemented. |
39 | */ | 39 | */ |
40 | struct inode *inode = dentry->d_inode; | 40 | struct inode *inode = file->f_mapping->host; |
41 | int err; | 41 | int err; |
42 | 42 | ||
43 | if (!nilfs_inode_dirty(inode)) | 43 | if (!nilfs_inode_dirty(inode)) |
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index 8723e5bfd071..47d6d7928122 100644 --- a/fs/nilfs2/nilfs.h +++ b/fs/nilfs2/nilfs.h | |||
@@ -228,7 +228,7 @@ extern void nilfs_set_link(struct inode *, struct nilfs_dir_entry *, | |||
228 | struct page *, struct inode *); | 228 | struct page *, struct inode *); |
229 | 229 | ||
230 | /* file.c */ | 230 | /* file.c */ |
231 | extern int nilfs_sync_file(struct file *, struct dentry *, int); | 231 | extern int nilfs_sync_file(struct file *, int); |
232 | 232 | ||
233 | /* ioctl.c */ | 233 | /* ioctl.c */ |
234 | long nilfs_ioctl(struct file *, unsigned int, unsigned long); | 234 | long nilfs_ioctl(struct file *, unsigned int, unsigned long); |
diff --git a/fs/ntfs/dir.c b/fs/ntfs/dir.c index fe44d3feee4a..0f48e7c5d9e1 100644 --- a/fs/ntfs/dir.c +++ b/fs/ntfs/dir.c | |||
@@ -1527,10 +1527,9 @@ static int ntfs_dir_open(struct inode *vi, struct file *filp) | |||
1527 | * this problem for now. We do write the $BITMAP attribute if it is present | 1527 | * this problem for now. We do write the $BITMAP attribute if it is present |
1528 | * which is the important one for a directory so things are not too bad. | 1528 | * which is the important one for a directory so things are not too bad. |
1529 | */ | 1529 | */ |
1530 | static int ntfs_dir_fsync(struct file *filp, struct dentry *dentry, | 1530 | static int ntfs_dir_fsync(struct file *filp, int datasync) |
1531 | int datasync) | ||
1532 | { | 1531 | { |
1533 | struct inode *bmp_vi, *vi = dentry->d_inode; | 1532 | struct inode *bmp_vi, *vi = filp->f_mapping->host; |
1534 | int err, ret; | 1533 | int err, ret; |
1535 | ntfs_attr na; | 1534 | ntfs_attr na; |
1536 | 1535 | ||
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index a1924a0d2ab0..113ebd9f25a4 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -2133,7 +2133,6 @@ static ssize_t ntfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
2133 | /** | 2133 | /** |
2134 | * ntfs_file_fsync - sync a file to disk | 2134 | * ntfs_file_fsync - sync a file to disk |
2135 | * @filp: file to be synced | 2135 | * @filp: file to be synced |
2136 | * @dentry: dentry describing the file to sync | ||
2137 | * @datasync: if non-zero only flush user data and not metadata | 2136 | * @datasync: if non-zero only flush user data and not metadata |
2138 | * | 2137 | * |
2139 | * Data integrity sync of a file to disk. Used for fsync, fdatasync, and msync | 2138 | * Data integrity sync of a file to disk. Used for fsync, fdatasync, and msync |
@@ -2149,19 +2148,15 @@ static ssize_t ntfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
2149 | * Also, if @datasync is true, we do not wait on the inode to be written out | 2148 | * Also, if @datasync is true, we do not wait on the inode to be written out |
2150 | * but we always wait on the page cache pages to be written out. | 2149 | * but we always wait on the page cache pages to be written out. |
2151 | * | 2150 | * |
2152 | * Note: In the past @filp could be NULL so we ignore it as we don't need it | ||
2153 | * anyway. | ||
2154 | * | ||
2155 | * Locking: Caller must hold i_mutex on the inode. | 2151 | * Locking: Caller must hold i_mutex on the inode. |
2156 | * | 2152 | * |
2157 | * TODO: We should probably also write all attribute/index inodes associated | 2153 | * TODO: We should probably also write all attribute/index inodes associated |
2158 | * with this inode but since we have no simple way of getting to them we ignore | 2154 | * with this inode but since we have no simple way of getting to them we ignore |
2159 | * this problem for now. | 2155 | * this problem for now. |
2160 | */ | 2156 | */ |
2161 | static int ntfs_file_fsync(struct file *filp, struct dentry *dentry, | 2157 | static int ntfs_file_fsync(struct file *filp, int datasync) |
2162 | int datasync) | ||
2163 | { | 2158 | { |
2164 | struct inode *vi = dentry->d_inode; | 2159 | struct inode *vi = filp->f_mapping->host; |
2165 | int err, ret = 0; | 2160 | int err, ret = 0; |
2166 | 2161 | ||
2167 | ntfs_debug("Entering for inode 0x%lx.", vi->i_ino); | 2162 | ntfs_debug("Entering for inode 0x%lx.", vi->i_ino); |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 97e54b9e654b..1c6220a8e072 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -175,13 +175,12 @@ static int ocfs2_dir_release(struct inode *inode, struct file *file) | |||
175 | return 0; | 175 | return 0; |
176 | } | 176 | } |
177 | 177 | ||
178 | static int ocfs2_sync_file(struct file *file, | 178 | static int ocfs2_sync_file(struct file *file, int datasync) |
179 | struct dentry *dentry, | ||
180 | int datasync) | ||
181 | { | 179 | { |
182 | int err = 0; | 180 | int err = 0; |
183 | journal_t *journal; | 181 | journal_t *journal; |
184 | struct inode *inode = dentry->d_inode; | 182 | struct dentry *dentry = file->f_path.dentry; |
183 | struct inode *inode = file->f_mapping->host; | ||
185 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | 184 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); |
186 | 185 | ||
187 | mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", file, dentry, datasync, | 186 | mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", file, dentry, datasync, |
diff --git a/fs/reiserfs/dir.c b/fs/reiserfs/dir.c index 4455fbe269a3..198dabf1b2bb 100644 --- a/fs/reiserfs/dir.c +++ b/fs/reiserfs/dir.c | |||
@@ -14,8 +14,7 @@ | |||
14 | extern const struct reiserfs_key MIN_KEY; | 14 | extern const struct reiserfs_key MIN_KEY; |
15 | 15 | ||
16 | static int reiserfs_readdir(struct file *, void *, filldir_t); | 16 | static int reiserfs_readdir(struct file *, void *, filldir_t); |
17 | static int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, | 17 | static int reiserfs_dir_fsync(struct file *filp, int datasync); |
18 | int datasync); | ||
19 | 18 | ||
20 | const struct file_operations reiserfs_dir_operations = { | 19 | const struct file_operations reiserfs_dir_operations = { |
21 | .llseek = generic_file_llseek, | 20 | .llseek = generic_file_llseek, |
@@ -28,10 +27,9 @@ const struct file_operations reiserfs_dir_operations = { | |||
28 | #endif | 27 | #endif |
29 | }; | 28 | }; |
30 | 29 | ||
31 | static int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, | 30 | static int reiserfs_dir_fsync(struct file *filp, int datasync) |
32 | int datasync) | ||
33 | { | 31 | { |
34 | struct inode *inode = dentry->d_inode; | 32 | struct inode *inode = filp->f_mapping->host; |
35 | int err; | 33 | int err; |
36 | reiserfs_write_lock(inode->i_sb); | 34 | reiserfs_write_lock(inode->i_sb); |
37 | err = reiserfs_commit_for_inode(inode); | 35 | err = reiserfs_commit_for_inode(inode); |
diff --git a/fs/reiserfs/file.c b/fs/reiserfs/file.c index 9977df9f3a54..b82cdd8a45dd 100644 --- a/fs/reiserfs/file.c +++ b/fs/reiserfs/file.c | |||
@@ -134,10 +134,9 @@ static void reiserfs_vfs_truncate_file(struct inode *inode) | |||
134 | * be removed... | 134 | * be removed... |
135 | */ | 135 | */ |
136 | 136 | ||
137 | static int reiserfs_sync_file(struct file *filp, | 137 | static int reiserfs_sync_file(struct file *filp, int datasync) |
138 | struct dentry *dentry, int datasync) | ||
139 | { | 138 | { |
140 | struct inode *inode = dentry->d_inode; | 139 | struct inode *inode = filp->f_mapping->host; |
141 | int err; | 140 | int err; |
142 | int barrier_done; | 141 | int barrier_done; |
143 | 142 | ||
diff --git a/fs/smbfs/file.c b/fs/smbfs/file.c index 84ecf0e43f91..8e187a0f94bb 100644 --- a/fs/smbfs/file.c +++ b/fs/smbfs/file.c | |||
@@ -28,8 +28,9 @@ | |||
28 | #include "proto.h" | 28 | #include "proto.h" |
29 | 29 | ||
30 | static int | 30 | static int |
31 | smb_fsync(struct file *file, struct dentry * dentry, int datasync) | 31 | smb_fsync(struct file *file, int datasync) |
32 | { | 32 | { |
33 | struct dentry *dentry = file->f_path.dentry; | ||
33 | struct smb_sb_info *server = server_from_dentry(dentry); | 34 | struct smb_sb_info *server = server_from_dentry(dentry); |
34 | int result; | 35 | int result; |
35 | 36 | ||
@@ -130,12 +130,10 @@ void emergency_sync(void) | |||
130 | 130 | ||
131 | /* | 131 | /* |
132 | * Generic function to fsync a file. | 132 | * Generic function to fsync a file. |
133 | * | ||
134 | * filp may be NULL if called via the msync of a vma. | ||
135 | */ | 133 | */ |
136 | int file_fsync(struct file *filp, struct dentry *dentry, int datasync) | 134 | int file_fsync(struct file *filp, int datasync) |
137 | { | 135 | { |
138 | struct inode * inode = dentry->d_inode; | 136 | struct inode *inode = filp->f_mapping->host; |
139 | struct super_block * sb; | 137 | struct super_block * sb; |
140 | int ret, err; | 138 | int ret, err; |
141 | 139 | ||
@@ -183,7 +181,7 @@ int vfs_fsync_range(struct file *file, loff_t start, loff_t end, int datasync) | |||
183 | * livelocks in fsync_buffers_list(). | 181 | * livelocks in fsync_buffers_list(). |
184 | */ | 182 | */ |
185 | mutex_lock(&mapping->host->i_mutex); | 183 | mutex_lock(&mapping->host->i_mutex); |
186 | err = file->f_op->fsync(file, file->f_path.dentry, datasync); | 184 | err = file->f_op->fsync(file, datasync); |
187 | if (!ret) | 185 | if (!ret) |
188 | ret = err; | 186 | ret = err; |
189 | mutex_unlock(&mapping->host->i_mutex); | 187 | mutex_unlock(&mapping->host->i_mutex); |
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 5692cf72b807..c726da68e6be 100644 --- a/fs/ubifs/file.c +++ b/fs/ubifs/file.c | |||
@@ -1304,9 +1304,9 @@ 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, struct dentry *dentry, int datasync) | 1307 | int ubifs_fsync(struct file *file, int datasync) |
1308 | { | 1308 | { |
1309 | struct inode *inode = dentry->d_inode; | 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; |
1311 | int err; | 1311 | int err; |
1312 | 1312 | ||
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index bd2542dad014..b0904536cc1c 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h | |||
@@ -1678,7 +1678,7 @@ const struct ubifs_lprops *ubifs_fast_find_frdi_idx(struct ubifs_info *c); | |||
1678 | int ubifs_calc_dark(const struct ubifs_info *c, int spc); | 1678 | int ubifs_calc_dark(const struct ubifs_info *c, int spc); |
1679 | 1679 | ||
1680 | /* file.c */ | 1680 | /* file.c */ |
1681 | int ubifs_fsync(struct file *file, struct dentry *dentry, int datasync); | 1681 | int ubifs_fsync(struct file *file, int datasync); |
1682 | int ubifs_setattr(struct dentry *dentry, struct iattr *attr); | 1682 | int ubifs_setattr(struct dentry *dentry, struct iattr *attr); |
1683 | 1683 | ||
1684 | /* dir.c */ | 1684 | /* dir.c */ |
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index d8fb1b5d6cb5..257a56b127cf 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
@@ -100,10 +100,10 @@ xfs_iozero( | |||
100 | STATIC int | 100 | STATIC int |
101 | xfs_file_fsync( | 101 | xfs_file_fsync( |
102 | struct file *file, | 102 | struct file *file, |
103 | struct dentry *dentry, | ||
104 | int datasync) | 103 | int datasync) |
105 | { | 104 | { |
106 | struct xfs_inode *ip = XFS_I(dentry->d_inode); | 105 | struct inode *inode = file->f_mapping->host; |
106 | struct xfs_inode *ip = XFS_I(inode); | ||
107 | struct xfs_trans *tp; | 107 | struct xfs_trans *tp; |
108 | int error = 0; | 108 | int error = 0; |
109 | int log_flushed = 0; | 109 | int log_flushed = 0; |
@@ -140,8 +140,8 @@ xfs_file_fsync( | |||
140 | * might gets cleared when the inode gets written out via the AIL | 140 | * might gets cleared when the inode gets written out via the AIL |
141 | * or xfs_iflush_cluster. | 141 | * or xfs_iflush_cluster. |
142 | */ | 142 | */ |
143 | if (((dentry->d_inode->i_state & I_DIRTY_DATASYNC) || | 143 | if (((inode->i_state & I_DIRTY_DATASYNC) || |
144 | ((dentry->d_inode->i_state & I_DIRTY_SYNC) && !datasync)) && | 144 | ((inode->i_state & I_DIRTY_SYNC) && !datasync)) && |
145 | ip->i_update_core) { | 145 | ip->i_update_core) { |
146 | /* | 146 | /* |
147 | * Kick off a transaction to log the inode core to get the | 147 | * Kick off a transaction to log the inode core to get the |
@@ -868,7 +868,7 @@ write_retry: | |||
868 | mutex_lock(&inode->i_mutex); | 868 | mutex_lock(&inode->i_mutex); |
869 | xfs_ilock(ip, iolock); | 869 | xfs_ilock(ip, iolock); |
870 | 870 | ||
871 | error2 = -xfs_file_fsync(file, file->f_path.dentry, | 871 | error2 = -xfs_file_fsync(file, |
872 | (file->f_flags & __O_SYNC) ? 0 : 1); | 872 | (file->f_flags & __O_SYNC) ? 0 : 1); |
873 | if (!error) | 873 | if (!error) |
874 | error = error2; | 874 | error = error2; |