diff options
69 files changed, 129 insertions, 157 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 61c98f03baa..96d4293607e 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -380,7 +380,7 @@ prototypes:  	int (*open) (struct inode *, struct file *);  	int (*flush) (struct file *);  	int (*release) (struct inode *, struct file *); -	int (*fsync) (struct file *, struct dentry *, int datasync); +	int (*fsync) (struct file *, int datasync);  	int (*aio_fsync) (struct kiocb *, int datasync);  	int (*fasync) (int, struct file *, int);  	int (*lock) (struct file *, int, struct file_lock *); diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index b66858538df..d4f5731dcbb 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt @@ -729,7 +729,7 @@ struct file_operations {  	int (*open) (struct inode *, struct file *);  	int (*flush) (struct file *);  	int (*release) (struct inode *, struct file *); -	int (*fsync) (struct file *, struct dentry *, int datasync); +	int (*fsync) (struct file *, int datasync);  	int (*aio_fsync) (struct kiocb *, int datasync);  	int (*fasync) (int, struct file *, int);  	int (*lock) (struct file *, int, struct file_lock *); diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c index 5c280825251..1a40da92154 100644 --- a/arch/powerpc/platforms/cell/spufs/file.c +++ b/arch/powerpc/platforms/cell/spufs/file.c @@ -1849,8 +1849,7 @@ out:  	return ret;  } -static int spufs_mfc_fsync(struct file *file, struct dentry *dentry, -			   int datasync) +static int spufs_mfc_fsync(struct file *file, int datasync)  {  	return spufs_mfc_flush(file, NULL);  } diff --git a/drivers/char/ps3flash.c b/drivers/char/ps3flash.c index 606048b72bc..85c004a518e 100644 --- a/drivers/char/ps3flash.c +++ b/drivers/char/ps3flash.c @@ -305,8 +305,7 @@ static int ps3flash_flush(struct file *file, fl_owner_t id)  	return ps3flash_writeback(ps3flash_dev);  } -static int ps3flash_fsync(struct file *file, struct dentry *dentry, -			  int datasync) +static int ps3flash_fsync(struct file *file, int datasync)  {  	return ps3flash_writeback(ps3flash_dev);  } diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index 72ebb3f06b8..4dfa6b90c21 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c @@ -189,8 +189,7 @@ static loff_t vol_cdev_llseek(struct file *file, loff_t offset, int origin)  	return new_offset;  } -static int vol_cdev_fsync(struct file *file, struct dentry *dentry, -			  int datasync) +static int vol_cdev_fsync(struct file *file, int datasync)  {  	struct ubi_volume_desc *desc = file->private_data;  	struct ubi_device *ubi = desc->vol->ubi; diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index 9286e863b0e..e92595eff1b 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c @@ -880,7 +880,7 @@ static struct inode *pohmelfs_alloc_inode(struct super_block *sb)  /*   * We want fsync() to work on POHMELFS.   */ -static int pohmelfs_fsync(struct file *file, struct dentry *dentry, int datasync) +static int pohmelfs_fsync(struct file *file, int datasync)  {  	struct inode *inode = file->f_mapping->host;  	struct writeback_control wbc = { diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c index 6b8bf8c781c..43abf55d8c6 100644 --- a/drivers/usb/gadget/printer.c +++ b/drivers/usb/gadget/printer.c @@ -794,7 +794,7 @@ printer_write(struct file *fd, const char __user *buf, size_t len, loff_t *ptr)  }  static int -printer_fsync(struct file *fd, struct dentry *dentry, int datasync) +printer_fsync(struct file *fd, int datasync)  {  	struct printer_dev	*dev = fd->private_data;  	unsigned long		flags; diff --git a/drivers/video/fb_defio.c b/drivers/video/fb_defio.c index 1105a591dcc..073c9b408cf 100644 --- a/drivers/video/fb_defio.c +++ b/drivers/video/fb_defio.c @@ -66,7 +66,7 @@ static int fb_deferred_io_fault(struct vm_area_struct *vma,  	return 0;  } -int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, int datasync) +int fb_deferred_io_fsync(struct file *file, int datasync)  {  	struct fb_info *info = file->private_data; diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 25b300e1c9d..2bedc6c94fc 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,  	return total;  } -static int v9fs_file_fsync(struct file *filp, struct dentry *dentry, -					int datasync) +static int v9fs_file_fsync(struct file *filp, int datasync)  {  	struct p9_fid *fid;  	struct p9_wstat wstat;  	int retval; -	P9_DPRINTK(P9_DEBUG_VFS, "filp %p dentry %p datasync %x\n", filp, -						dentry, datasync); +	P9_DPRINTK(P9_DEBUG_VFS, "filp %p datasync %x\n", filp, datasync);  	fid = filp->private_data;  	v9fs_blank_wstat(&wstat); diff --git a/fs/affs/affs.h b/fs/affs/affs.h index 861dae68ac1..f05b6155ccc 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  void		affs_free_prealloc(struct inode *inode);  extern void	affs_truncate(struct inode *); -int		affs_file_fsync(struct file *, struct dentry *, int); +int		affs_file_fsync(struct file *, int);  /* dir.c */ diff --git a/fs/affs/file.c b/fs/affs/file.c index 184e55c1c9b..322710c3eed 100644 --- a/fs/affs/file.c +++ b/fs/affs/file.c @@ -916,9 +916,9 @@ affs_truncate(struct inode *inode)  	affs_free_prealloc(inode);  } -int affs_file_fsync(struct file *filp, struct dentry *dentry, int datasync) +int affs_file_fsync(struct file *filp, int datasync)  { -	struct inode * inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	int ret, err;  	ret = write_inode_now(inode, 0); diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 807f284cc75..5f679b77ce2 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 *);  extern ssize_t afs_file_write(struct kiocb *, const struct iovec *,  			      unsigned long, loff_t);  extern int afs_writeback_all(struct afs_vnode *); -extern int afs_fsync(struct file *, struct dentry *, int); +extern int afs_fsync(struct file *, int);  /*****************************************************************************/ diff --git a/fs/afs/write.c b/fs/afs/write.c index 3bed54a294d..3dab9e9948d 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -701,8 +701,9 @@ int afs_writeback_all(struct afs_vnode *vnode)   * - the return status from this call provides a reliable indication of   *   whether any write errors occurred for this process.   */ -int afs_fsync(struct file *file, struct dentry *dentry, int datasync) +int afs_fsync(struct file *file, int datasync)  { +	struct dentry *dentry = file->f_path.dentry;  	struct afs_writeback *wb, *xwb;  	struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);  	int ret; diff --git a/fs/bad_inode.c b/fs/bad_inode.c index a05287a23f6..52e59bf4aa5 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)  	return -EIO;  } -static int bad_file_fsync(struct file *file, struct dentry *dentry, -			int datasync) +static int bad_file_fsync(struct file *file, int datasync)  {  	return -EIO;  } diff --git a/fs/block_dev.c b/fs/block_dev.c index 26e5f502662..d0b37e626a1 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)  	return retval;  } -/* - *	Filp is never NULL; the only case when ->fsync() is called with - *	NULL first argument is nfsd_sync_dir() and that's not a directory. - */ -  -int blkdev_fsync(struct file *filp, struct dentry *dentry, int datasync) +int blkdev_fsync(struct file *filp, int datasync)  {  	struct inode *bd_inode = filp->f_mapping->host;  	struct block_device *bdev = I_BDEV(bd_inode); diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index e9bf86415e8..29c20092847 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -2434,7 +2434,7 @@ void btrfs_update_iflags(struct inode *inode);  void btrfs_inherit_iflags(struct inode *inode, struct inode *dir);  /* file.c */ -int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync); +int btrfs_sync_file(struct file *file, int datasync);  int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end,  			    int skip_pinned);  int btrfs_check_file(struct btrfs_root *root, struct inode *inode); diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 79437c5eeb1..787b50a16a1 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)   * important optimization for directories because holding the mutex prevents   * new operations on the dir while we write to disk.   */ -int btrfs_sync_file(struct file *file, struct dentry *dentry, int datasync) +int btrfs_sync_file(struct file *file, int datasync)  { +	struct dentry *dentry = file->f_path.dentry;  	struct inode *inode = dentry->d_inode;  	struct btrfs_root *root = BTRFS_I(inode)->root;  	int ret = 0; diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 0dd0b81e64f..ae3e3a30644 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -1776,9 +1776,9 @@ out:  	spin_unlock(&ci->i_unsafe_lock);  } -int ceph_fsync(struct file *file, struct dentry *dentry, int datasync) +int ceph_fsync(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	struct ceph_inode_info *ci = ceph_inode(inode);  	unsigned flush_tid;  	int ret; diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 4fd30900eff..0057f4a0734 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,   * an fsync() on a dir will wait for any uncommitted directory   * operations to commit.   */ -static int ceph_dir_fsync(struct file *file, struct dentry *dentry, -			  int datasync) +static int ceph_dir_fsync(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_path.dentry->d_inode;  	struct ceph_inode_info *ci = ceph_inode(inode);  	struct list_head *head = &ci->i_unsafe_dirops;  	struct ceph_mds_request *req; diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 3725c9ee9d0..dd1e7add656 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -811,7 +811,7 @@ extern void ceph_put_cap(struct ceph_cap *cap);  extern void ceph_queue_caps_release(struct inode *inode);  extern int ceph_write_inode(struct inode *inode, struct writeback_control *wbc); -extern int ceph_fsync(struct file *file, struct dentry *dentry, int datasync); +extern int ceph_fsync(struct file *file, int datasync);  extern void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc,  				    struct ceph_mds_session *session);  extern int ceph_get_cap_mds(struct inode *inode); diff --git a/fs/cifs/cifsfs.h b/fs/cifs/cifsfs.h index 0242ff9cbf4..a7eb65c84b1 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,  extern ssize_t cifs_user_write(struct file *file, const char __user *write_data,  			 size_t write_size, loff_t *poffset);  extern int cifs_lock(struct file *, int, struct file_lock *); -extern int cifs_fsync(struct file *, struct dentry *, int); +extern int cifs_fsync(struct file *, int);  extern int cifs_flush(struct file *, fl_owner_t id);  extern int cifs_file_mmap(struct file * , struct vm_area_struct *);  extern const struct file_operations cifs_dir_ops; diff --git a/fs/cifs/file.c b/fs/cifs/file.c index a83541ec971..f1ff785b229 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,  	return rc;  } -int cifs_fsync(struct file *file, struct dentry *dentry, int datasync) +int cifs_fsync(struct file *file, int datasync)  {  	int xid;  	int rc = 0; @@ -1688,7 +1688,7 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)  	xid = GetXid();  	cFYI(1, "Sync file - name: %s datasync: 0x%x", -		dentry->d_name.name, datasync); +		file->f_path.dentry->d_name.name, datasync);  	rc = filemap_write_and_wait(inode->i_mapping);  	if (rc == 0) { diff --git a/fs/coda/coda_int.h b/fs/coda/coda_int.h index d99860a3389..6b443ff43a1 100644 --- a/fs/coda/coda_int.h +++ b/fs/coda/coda_int.h @@ -11,8 +11,7 @@ extern int coda_fake_statfs;  void coda_destroy_inodecache(void);  int coda_init_inodecache(void); -int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, -	       int datasync); +int coda_fsync(struct file *coda_file, int datasync);  void coda_sysctl_init(void);  void coda_sysctl_clean(void); diff --git a/fs/coda/file.c b/fs/coda/file.c index 7196077b168..ad3cd2abeeb 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)  	return 0;  } -int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) +int coda_fsync(struct file *coda_file, int datasync)  {  	struct file *host_file; -	struct inode *coda_inode = coda_dentry->d_inode; +	struct inode *coda_inode = coda_file->f_path.dentry->d_inode;  	struct coda_file_info *cfi;  	int err = 0; diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index 3bdddbcc785..e8fcf4e2ed7 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)  }  static int -ecryptfs_fsync(struct file *file, struct dentry *dentry, int datasync) +ecryptfs_fsync(struct file *file, int datasync)  {  	return vfs_fsync(ecryptfs_file_to_lower(file), datasync);  } diff --git a/fs/exofs/file.c b/fs/exofs/file.c index 839b9dc1e70..fef6899be39 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)  	return 0;  } -static int exofs_file_fsync(struct file *filp, struct dentry *dentry, -			    int datasync) +static int exofs_file_fsync(struct file *filp, int datasync)  {  	int ret;  	struct address_space *mapping = filp->f_mapping; -	struct inode *inode = dentry->d_inode; +	struct inode *inode = mapping->host;  	struct super_block *sb;  	ret = filemap_write_and_wait(mapping); @@ -66,7 +65,7 @@ static int exofs_file_fsync(struct file *filp, struct dentry *dentry,  static int exofs_flush(struct file *file, fl_owner_t id)  { -	exofs_file_fsync(file, file->f_path.dentry, 1); +	exofs_file_fsync(file, 1);  	/* TODO: Flush the OSD target */  	return 0;  } diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index 0b038e47ad2..8e917b68651 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h @@ -155,7 +155,7 @@ extern void ext2_write_super (struct super_block *);  extern const struct file_operations ext2_dir_operations;  /* file.c */ -extern int ext2_fsync(struct file *file, struct dentry *dentry, int datasync); +extern int ext2_fsync(struct file *file, int datasync);  extern const struct inode_operations ext2_file_inode_operations;  extern const struct file_operations ext2_file_operations;  extern const struct file_operations ext2_xip_file_operations; diff --git a/fs/ext2/file.c b/fs/ext2/file.c index 5d198d0697f..48bcfc32701 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)  	return 0;  } -int ext2_fsync(struct file *file, struct dentry *dentry, int datasync) +int ext2_fsync(struct file *file, int datasync)  {  	int ret; -	struct super_block *sb = dentry->d_inode->i_sb; +	struct super_block *sb = file->f_mapping->host->i_sb;  	struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping; -	ret = simple_fsync(file, dentry, datasync); +	ret = simple_fsync(file, datasync);  	if (ret == -EIO || test_and_clear_bit(AS_EIO, &mapping->flags)) {  		/* We don't really know where the IO error happened... */  		ext2_error(sb, __func__, diff --git a/fs/ext3/fsync.c b/fs/ext3/fsync.c index fcf7487734b..d7e9f74dc3a 100644 --- a/fs/ext3/fsync.c +++ b/fs/ext3/fsync.c @@ -43,9 +43,9 @@   * inode to disk.   */ -int ext3_sync_file(struct file * file, struct dentry *dentry, int datasync) +int ext3_sync_file(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	struct ext3_inode_info *ei = EXT3_I(inode);  	journal_t *journal = EXT3_SB(inode->i_sb)->s_journal;  	int ret, needs_barrier = 0; diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 60bd31026e7..19a4de57128 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,  extern void ext4_htree_free_dir_info(struct dir_private_info *p);  /* fsync.c */ -extern int ext4_sync_file(struct file *, struct dentry *, int); +extern int ext4_sync_file(struct file *, int);  /* hash.c */  extern int ext4fs_dirhash(const char *name, int len, struct diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index b6a74f991bf..40f34520173 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c @@ -71,9 +71,9 @@ static void ext4_sync_parent(struct inode *inode)   * i_mutex lock is held when entering and exiting this function   */ -int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync) +int ext4_sync_file(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	struct ext4_inode_info *ei = EXT4_I(inode);  	journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;  	int ret; @@ -81,7 +81,7 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)  	J_ASSERT(ext4_journal_current_handle() == NULL); -	trace_ext4_sync_file(file, dentry, datasync); +	trace_ext4_sync_file(file, datasync);  	if (inode->i_sb->s_flags & MS_RDONLY)  		return 0; @@ -91,7 +91,7 @@ int ext4_sync_file(struct file *file, struct dentry *dentry, int datasync)  		return ret;  	if (!journal) { -		ret = simple_fsync(file, dentry, datasync); +		ret = simple_fsync(file, datasync);  		if (!ret && !list_empty(&inode->i_dentry))  			ext4_sync_parent(inode);  		return ret; diff --git a/fs/fat/fat.h b/fs/fat/fat.h index 53dba57b49a..a1c8c4b44fd 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);  extern void fat_truncate(struct inode *inode);  extern int fat_getattr(struct vfsmount *mnt, struct dentry *dentry,  		       struct kstat *stat); -extern int fat_file_fsync(struct file *file, struct dentry *dentry, -			  int datasync); +extern int fat_file_fsync(struct file *file, int datasync);  /* fat/inode.c */  extern void fat_attach(struct inode *inode, loff_t i_pos); diff --git a/fs/fat/file.c b/fs/fat/file.c index a14c2f6a489..29a57694437 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)  	return 0;  } -int fat_file_fsync(struct file *filp, struct dentry *dentry, int datasync) +int fat_file_fsync(struct file *filp, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	int res, err; -	res = simple_fsync(filp, dentry, datasync); +	res = simple_fsync(filp, datasync);  	err = sync_mapping_buffers(MSDOS_SB(inode->i_sb)->fat_inode->i_mapping);  	return res ? res : err; diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 4787ae6c5c1..3cdc5f78a40 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)  	return 0;  } -static int fuse_dir_fsync(struct file *file, struct dentry *de, int datasync) +static int fuse_dir_fsync(struct file *file, int datasync)  { -	/* nfsd can call this with no file */ -	return file ? fuse_fsync_common(file, de, datasync, 1) : 0; +	return fuse_fsync_common(file, datasync, 1);  }  static bool update_mtime(unsigned ivalid) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index a9f5e137f1d..b5fd6f9905e 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -351,10 +351,9 @@ static void fuse_sync_writes(struct inode *inode)  	fuse_release_nowrite(inode);  } -int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, -		      int isdir) +int fuse_fsync_common(struct file *file, int datasync, int isdir)  { -	struct inode *inode = de->d_inode; +	struct inode *inode = file->f_mapping->host;  	struct fuse_conn *fc = get_fuse_conn(inode);  	struct fuse_file *ff = file->private_data;  	struct fuse_req *req; @@ -403,9 +402,9 @@ int fuse_fsync_common(struct file *file, struct dentry *de, int datasync,  	return err;  } -static int fuse_fsync(struct file *file, struct dentry *de, int datasync) +static int fuse_fsync(struct file *file, int datasync)  { -	return fuse_fsync_common(file, de, datasync, 0); +	return fuse_fsync_common(file, datasync, 0);  }  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 01cc462ff45..2c0d14a8677 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);  /**   * Send FSYNC or FSYNCDIR request   */ -int fuse_fsync_common(struct file *file, struct dentry *de, int datasync, -		      int isdir); +int fuse_fsync_common(struct file *file, int datasync, int isdir);  /**   * Notify poll wakeup diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index b20bfcc9fa2..ed9a94f0ef1 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)   * Returns: errno   */ -static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync) +static int gfs2_fsync(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	int sync_state = inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC);  	int ret = 0; diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 3a029d8f4cf..87ac1891a18 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)  	return 0;  } -int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync) +int hostfs_fsync(struct file *file, int datasync)  { -	return fsync_file(HOSTFS_I(dentry->d_inode)->fd, datasync); +	return fsync_file(HOSTFS_I(file->f_mapping->host)->fd, datasync);  }  static const struct file_operations hostfs_file_fops = { diff --git a/fs/hpfs/file.c b/fs/hpfs/file.c index 3efabff0036..a9ae9bfa752 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)  	return 0;  } -int hpfs_file_fsync(struct file *file, struct dentry *dentry, int datasync) +int hpfs_file_fsync(struct file *file, int datasync)  { -	/*return file_fsync(file, dentry);*/ +	/*return file_fsync(file, datasync);*/  	return 0; /* Don't fsync :-) */  } diff --git a/fs/hpfs/hpfs_fn.h b/fs/hpfs/hpfs_fn.h index 97bf738cd5d..75f9d432485 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 *,  /* file.c */ -int hpfs_file_fsync(struct file *, struct dentry *, int); +int hpfs_file_fsync(struct file *, int);  extern const struct file_operations hpfs_file_ops;  extern const struct inode_operations hpfs_file_iops;  extern const struct address_space_operations hpfs_aops; diff --git a/fs/hppfs/hppfs.c b/fs/hppfs/hppfs.c index 2e4dfa8593d..826c3f9d29a 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)  	return err;  } -static int hppfs_fsync(struct file *file, struct dentry *dentry, int datasync) +static int hppfs_fsync(struct file *file, int datasync)  {  	return 0;  } diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c index e7291c161a1..81349702443 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,  			struct page **pagep, void **fsdata);  static int jffs2_readpage (struct file *filp, struct page *pg); -int jffs2_fsync(struct file *filp, struct dentry *dentry, int datasync) +int jffs2_fsync(struct file *filp, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);  	/* 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 035a767f958..4791aacf308 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;  extern const struct file_operations jffs2_file_operations;  extern const struct inode_operations jffs2_file_inode_operations;  extern const struct address_space_operations jffs2_file_address_operations; -int jffs2_fsync(struct file *, struct dentry *, int); +int jffs2_fsync(struct file *, int);  int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);  /* ioctl.c */ diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 85d9ec65922..127263cc865 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c @@ -27,9 +27,9 @@  #include "jfs_acl.h"  #include "jfs_debug.h" -int jfs_fsync(struct file *file, struct dentry *dentry, int datasync) +int jfs_fsync(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	int rc = 0;  	if (!(inode->i_state & I_DIRTY) || diff --git a/fs/jfs/jfs_inode.h b/fs/jfs/jfs_inode.h index 9e6bda30a6e..11042b1f44b 100644 --- a/fs/jfs/jfs_inode.h +++ b/fs/jfs/jfs_inode.h @@ -21,7 +21,7 @@  struct fid;  extern struct inode *ialloc(struct inode *, umode_t); -extern int jfs_fsync(struct file *, struct dentry *, int); +extern int jfs_fsync(struct file *, int);  extern long jfs_ioctl(struct file *, unsigned int, unsigned long);  extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long);  extern struct inode *jfs_iget(struct super_block *, unsigned long); diff --git a/fs/libfs.c b/fs/libfs.c index 232bea425b0..e57ea58bda6 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  	return NULL;  } -int simple_sync_file(struct file * file, struct dentry *dentry, int datasync) +int simple_sync_file(struct file *file, int datasync)  {  	return 0;  } @@ -851,13 +851,13 @@ struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,  }  EXPORT_SYMBOL_GPL(generic_fh_to_parent); -int simple_fsync(struct file *file, struct dentry *dentry, int datasync) +int simple_fsync(struct file *file, int datasync)  {  	struct writeback_control wbc = {  		.sync_mode = WB_SYNC_ALL,  		.nr_to_write = 0, /* metadata-only; caller takes care of data */  	}; -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	int err;  	int ret; diff --git a/fs/logfs/file.c b/fs/logfs/file.c index 0de52407187..abe1cafbd4c 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,  	}  } -int logfs_fsync(struct file *file, struct dentry *dentry, int datasync) +int logfs_fsync(struct file *file, int datasync)  { -	struct super_block *sb = dentry->d_inode->i_sb; +	struct super_block *sb = file->f_mapping->host->i_sb;  	logfs_write_anchor(sb);  	return 0; diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index 1a9db84f8d8..c838c4d7211 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h @@ -506,7 +506,7 @@ extern const struct address_space_operations logfs_reg_aops;  int logfs_readpage(struct file *file, struct page *page);  int logfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd,  		unsigned long arg); -int logfs_fsync(struct file *file, struct dentry *dentry, int datasync); +int logfs_fsync(struct file *file, int datasync);  /* gc.c */  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 b9387089289..3639cc5cbda 100644 --- a/fs/ncpfs/file.c +++ b/fs/ncpfs/file.c @@ -22,7 +22,7 @@  #include <linux/ncp_fs.h>  #include "ncplib_kernel.h" -static int ncp_fsync(struct file *file, struct dentry *dentry, int datasync) +static int ncp_fsync(struct file *file, int datasync)  {  	return 0;  } diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index db64854b7b0..782b431ef91 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 *);  static int nfs_mknod(struct inode *, struct dentry *, int, dev_t);  static int nfs_rename(struct inode *, struct dentry *,  		      struct inode *, struct dentry *); -static int nfs_fsync_dir(struct file *, struct dentry *, int); +static int nfs_fsync_dir(struct file *, int);  static loff_t nfs_llseek_dir(struct file *, loff_t, int);  const struct file_operations nfs_dir_operations = { @@ -641,8 +641,10 @@ out:   * All directory operations under NFS are synchronous, so fsync()   * is a dummy operation.   */ -static int nfs_fsync_dir(struct file *filp, struct dentry *dentry, int datasync) +static int nfs_fsync_dir(struct file *filp, int datasync)  { +	struct dentry *dentry = filp->f_path.dentry; +  	dfprintk(FILE, "NFS: fsync dir(%s/%s) datasync %d\n",  			dentry->d_parent->d_name.name, dentry->d_name.name,  			datasync); diff --git a/fs/nfs/file.c b/fs/nfs/file.c index cac96bcc91e..36a5e74f51b 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,  static ssize_t nfs_file_write(struct kiocb *, const struct iovec *iov,  				unsigned long nr_segs, loff_t pos);  static int  nfs_file_flush(struct file *, fl_owner_t id); -static int  nfs_file_fsync(struct file *, struct dentry *dentry, int datasync); +static int  nfs_file_fsync(struct file *, int datasync);  static int nfs_check_flags(int flags);  static int nfs_lock(struct file *filp, int cmd, struct file_lock *fl);  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)   * whether any write errors occurred for this process.   */  static int -nfs_file_fsync(struct file *file, struct dentry *dentry, int datasync) +nfs_file_fsync(struct file *file, int datasync)  { +	struct dentry *dentry = file->f_path.dentry;  	struct nfs_open_context *ctx = nfs_file_open_context(file);  	struct inode *inode = dentry->d_inode; diff --git a/fs/nilfs2/file.c b/fs/nilfs2/file.c index 30292df443c..c9a30d7ff6f 100644 --- a/fs/nilfs2/file.c +++ b/fs/nilfs2/file.c @@ -27,7 +27,7 @@  #include "nilfs.h"  #include "segment.h" -int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync) +int nilfs_sync_file(struct file *file, int datasync)  {  	/*  	 * Called from fsync() system call @@ -37,7 +37,7 @@ int nilfs_sync_file(struct file *file, struct dentry *dentry, int datasync)  	 * This function should be implemented when the writeback function  	 * will be implemented.  	 */ -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	int err;  	if (!nilfs_inode_dirty(inode)) diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index 8723e5bfd07..47d6d792812 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 *,  			   struct page *, struct inode *);  /* file.c */ -extern int nilfs_sync_file(struct file *, struct dentry *, int); +extern int nilfs_sync_file(struct file *, int);  /* ioctl.c */  long nilfs_ioctl(struct file *, unsigned int, unsigned long); diff --git a/fs/ntfs/dir.c b/fs/ntfs/dir.c index fe44d3feee4..0f48e7c5d9e 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)   * this problem for now.  We do write the $BITMAP attribute if it is present   * which is the important one for a directory so things are not too bad.   */ -static int ntfs_dir_fsync(struct file *filp, struct dentry *dentry, -		int datasync) +static int ntfs_dir_fsync(struct file *filp, int datasync)  { -	struct inode *bmp_vi, *vi = dentry->d_inode; +	struct inode *bmp_vi, *vi = filp->f_mapping->host;  	int err, ret;  	ntfs_attr na; diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index a1924a0d2ab..113ebd9f25a 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,  /**   * ntfs_file_fsync - sync a file to disk   * @filp:	file to be synced - * @dentry:	dentry describing the file to sync   * @datasync:	if non-zero only flush user data and not metadata   *   * 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,   * Also, if @datasync is true, we do not wait on the inode to be written out   * but we always wait on the page cache pages to be written out.   * - * Note: In the past @filp could be NULL so we ignore it as we don't need it - * anyway. - *   * Locking: Caller must hold i_mutex on the inode.   *   * TODO: We should probably also write all attribute/index inodes associated   * with this inode but since we have no simple way of getting to them we ignore   * this problem for now.   */ -static int ntfs_file_fsync(struct file *filp, struct dentry *dentry, -		int datasync) +static int ntfs_file_fsync(struct file *filp, int datasync)  { -	struct inode *vi = dentry->d_inode; +	struct inode *vi = filp->f_mapping->host;  	int err, ret = 0;  	ntfs_debug("Entering for inode 0x%lx.", vi->i_ino); diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 97e54b9e654..1c6220a8e07 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)  	return 0;  } -static int ocfs2_sync_file(struct file *file, -			   struct dentry *dentry, -			   int datasync) +static int ocfs2_sync_file(struct file *file, int datasync)  {  	int err = 0;  	journal_t *journal; -	struct inode *inode = dentry->d_inode; +	struct dentry *dentry = file->f_path.dentry; +	struct inode *inode = file->f_mapping->host;  	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);  	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 4455fbe269a..198dabf1b2b 100644 --- a/fs/reiserfs/dir.c +++ b/fs/reiserfs/dir.c @@ -14,8 +14,7 @@  extern const struct reiserfs_key MIN_KEY;  static int reiserfs_readdir(struct file *, void *, filldir_t); -static int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, -			      int datasync); +static int reiserfs_dir_fsync(struct file *filp, int datasync);  const struct file_operations reiserfs_dir_operations = {  	.llseek = generic_file_llseek, @@ -28,10 +27,9 @@ const struct file_operations reiserfs_dir_operations = {  #endif  }; -static int reiserfs_dir_fsync(struct file *filp, struct dentry *dentry, -			      int datasync) +static int reiserfs_dir_fsync(struct file *filp, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	int err;  	reiserfs_write_lock(inode->i_sb);  	err = reiserfs_commit_for_inode(inode); diff --git a/fs/reiserfs/file.c b/fs/reiserfs/file.c index 9977df9f3a5..b82cdd8a45d 100644 --- a/fs/reiserfs/file.c +++ b/fs/reiserfs/file.c @@ -134,10 +134,9 @@ static void reiserfs_vfs_truncate_file(struct inode *inode)   * be removed...   */ -static int reiserfs_sync_file(struct file *filp, -			      struct dentry *dentry, int datasync) +static int reiserfs_sync_file(struct file *filp, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	int err;  	int barrier_done; diff --git a/fs/smbfs/file.c b/fs/smbfs/file.c index 84ecf0e43f9..8e187a0f94b 100644 --- a/fs/smbfs/file.c +++ b/fs/smbfs/file.c @@ -28,8 +28,9 @@  #include "proto.h"  static int -smb_fsync(struct file *file, struct dentry * dentry, int datasync) +smb_fsync(struct file *file, int datasync)  { +	struct dentry *dentry = file->f_path.dentry;  	struct smb_sb_info *server = server_from_dentry(dentry);  	int result; diff --git a/fs/sync.c b/fs/sync.c index e8cbd415e50..c9f83f480ec 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -130,12 +130,10 @@ void emergency_sync(void)  /*   * Generic function to fsync a file. - * - * filp may be NULL if called via the msync of a vma.   */ -int file_fsync(struct file *filp, struct dentry *dentry, int datasync) +int file_fsync(struct file *filp, int datasync)  { -	struct inode * inode = dentry->d_inode; +	struct inode *inode = filp->f_mapping->host;  	struct super_block * sb;  	int ret, err; @@ -183,7 +181,7 @@ int vfs_fsync_range(struct file *file, loff_t start, loff_t end, int datasync)  	 * livelocks in fsync_buffers_list().  	 */  	mutex_lock(&mapping->host->i_mutex); -	err = file->f_op->fsync(file, file->f_path.dentry, datasync); +	err = file->f_op->fsync(file, datasync);  	if (!ret)  		ret = err;  	mutex_unlock(&mapping->host->i_mutex); diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c index 5692cf72b80..c726da68e6b 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)  	return NULL;  } -int ubifs_fsync(struct file *file, struct dentry *dentry, int datasync) +int ubifs_fsync(struct file *file, int datasync)  { -	struct inode *inode = dentry->d_inode; +	struct inode *inode = file->f_mapping->host;  	struct ubifs_info *c = inode->i_sb->s_fs_info;  	int err; diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index bd2542dad01..b0904536cc1 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);  int ubifs_calc_dark(const struct ubifs_info *c, int spc);  /* file.c */ -int ubifs_fsync(struct file *file, struct dentry *dentry, int datasync); +int ubifs_fsync(struct file *file, int datasync);  int ubifs_setattr(struct dentry *dentry, struct iattr *attr);  /* dir.c */ diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index d8fb1b5d6cb..257a56b127c 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(  STATIC int  xfs_file_fsync(  	struct file		*file, -	struct dentry		*dentry,  	int			datasync)  { -	struct xfs_inode	*ip = XFS_I(dentry->d_inode); +	struct inode		*inode = file->f_mapping->host; +	struct xfs_inode	*ip = XFS_I(inode);  	struct xfs_trans	*tp;  	int			error = 0;  	int			log_flushed = 0; @@ -140,8 +140,8 @@ xfs_file_fsync(  	 * might gets cleared when the inode gets written out via the AIL  	 * or xfs_iflush_cluster.  	 */ -	if (((dentry->d_inode->i_state & I_DIRTY_DATASYNC) || -	    ((dentry->d_inode->i_state & I_DIRTY_SYNC) && !datasync)) && +	if (((inode->i_state & I_DIRTY_DATASYNC) || +	    ((inode->i_state & I_DIRTY_SYNC) && !datasync)) &&  	    ip->i_update_core) {  		/*  		 * Kick off a transaction to log the inode core to get the @@ -868,7 +868,7 @@ write_retry:  			mutex_lock(&inode->i_mutex);  		xfs_ilock(ip, iolock); -		error2 = -xfs_file_fsync(file, file->f_path.dentry, +		error2 = -xfs_file_fsync(file,  					 (file->f_flags & __O_SYNC) ? 0 : 1);  		if (!error)  			error = error2; diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 16ed0284d78..05e5f599621 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -224,7 +224,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,  void block_sync_page(struct page *);  sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *);  int block_truncate_page(struct address_space *, loff_t, get_block_t *); -int file_fsync(struct file *, struct dentry *, int); +int file_fsync(struct file *, int);  int nobh_write_begin(struct file *, struct address_space *,  				loff_t, unsigned, unsigned,  				struct page **, void **, get_block_t*); diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 5f494b46509..7fc62d4550b 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h @@ -868,7 +868,7 @@ extern int ext3_htree_store_dirent(struct file *dir_file, __u32 hash,  extern void ext3_htree_free_dir_info(struct dir_private_info *p);  /* fsync.c */ -extern int ext3_sync_file (struct file *, struct dentry *, int); +extern int ext3_sync_file(struct file *, int);  /* hash.c */  extern int ext3fs_dirhash(const char *name, int len, struct diff --git a/include/linux/fb.h b/include/linux/fb.h index f3793ebc241..907ace3a64c 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -4,8 +4,6 @@  #include <linux/types.h>  #include <linux/i2c.h> -struct dentry; -  /* Definitions of frame buffers						*/  #define FB_MAX			32	/* sufficient for now */ @@ -1017,8 +1015,7 @@ extern void fb_deferred_io_open(struct fb_info *info,  				struct inode *inode,  				struct file *file);  extern void fb_deferred_io_cleanup(struct fb_info *info); -extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry, -				int datasync); +extern int fb_deferred_io_fsync(struct file *file, int datasync);  static inline bool fb_be_math(struct fb_info *info)  { diff --git a/include/linux/fs.h b/include/linux/fs.h index 3d9ed830240..eb39e5eb77f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1498,7 +1498,7 @@ struct file_operations {  	int (*open) (struct inode *, struct file *);  	int (*flush) (struct file *, fl_owner_t id);  	int (*release) (struct inode *, struct file *); -	int (*fsync) (struct file *, struct dentry *, int datasync); +	int (*fsync) (struct file *, int datasync);  	int (*aio_fsync) (struct kiocb *, int datasync);  	int (*fasync) (int, struct file *, int);  	int (*lock) (struct file *, int, struct file_lock *); @@ -2213,7 +2213,7 @@ extern int generic_segment_checks(const struct iovec *iov,  /* fs/block_dev.c */  extern ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov,  				unsigned long nr_segs, loff_t pos); -extern int blkdev_fsync(struct file *filp, struct dentry *dentry, int datasync); +extern int blkdev_fsync(struct file *filp, int datasync);  /* fs/splice.c */  extern ssize_t generic_file_splice_read(struct file *, loff_t *, @@ -2348,7 +2348,7 @@ extern int simple_link(struct dentry *, struct inode *, struct dentry *);  extern int simple_unlink(struct inode *, struct dentry *);  extern int simple_rmdir(struct inode *, struct dentry *);  extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); -extern int simple_sync_file(struct file *, struct dentry *, int); +extern int simple_sync_file(struct file *, int);  extern int simple_empty(struct dentry *);  extern int simple_readpage(struct file *file, struct page *page);  extern int simple_write_begin(struct file *file, struct address_space *mapping, @@ -2373,7 +2373,7 @@ extern ssize_t simple_read_from_buffer(void __user *to, size_t count,  extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,  		const void __user *from, size_t count); -extern int simple_fsync(struct file *, struct dentry *, int); +extern int simple_fsync(struct file *, int);  #ifdef CONFIG_MIGRATION  extern int buffer_migrate_page(struct address_space *, diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index 5d60ad4ebf7..f5b1ba90e95 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h @@ -606,9 +606,9 @@ TRACE_EVENT(ext4_free_blocks,  );  TRACE_EVENT(ext4_sync_file, -	TP_PROTO(struct file *file, struct dentry *dentry, int datasync), +	TP_PROTO(struct file *file, int datasync), -	TP_ARGS(file, dentry, datasync), +	TP_ARGS(file, datasync),  	TP_STRUCT__entry(  		__field(	dev_t,	dev			) @@ -618,6 +618,8 @@ TRACE_EVENT(ext4_sync_file,  	),  	TP_fast_assign( +		struct dentry *dentry = file->f_path.dentry; +  		__entry->dev		= dentry->d_inode->i_sb->s_dev;  		__entry->ino		= dentry->d_inode->i_ino;  		__entry->datasync	= datasync; diff --git a/ipc/shm.c b/ipc/shm.c index 1a314c89f93..52ed77eb971 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -273,16 +273,13 @@ static int shm_release(struct inode *ino, struct file *file)  	return 0;  } -static int shm_fsync(struct file *file, struct dentry *dentry, int datasync) +static int shm_fsync(struct file *file, int datasync)  { -	int (*fsync) (struct file *, struct dentry *, int datasync);  	struct shm_file_data *sfd = shm_file_data(file); -	int ret = -EINVAL; -	fsync = sfd->file->f_op->fsync; -	if (fsync) -		ret = fsync(sfd->file, sfd->file->f_path.dentry, datasync); -	return ret; +	if (!sfd->file->f_op->fsync) +		return -EINVAL; +	return sfd->file->f_op->fsync(sfd->file, datasync);  }  static unsigned long shm_get_unmapped_area(struct file *file,  |