diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 12:06:36 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2011-05-14 12:06:36 +0200 | 
| commit | a18f22a968de17b29f2310cdb7ba69163e65ec15 (patch) | |
| tree | a7d56d88fad5e444d7661484109758a2f436129e /fs/sync.c | |
| parent | a1c57e0fec53defe745e64417eacdbd3618c3e66 (diff) | |
| parent | 798778b8653f64b7b2162ac70eca10367cff6ce8 (diff) | |
Merge branch 'consolidate-clksrc-i8253' of master.kernel.org:~rmk/linux-2.6-arm into timers/clocksource
Conflicts:
	arch/ia64/kernel/cyclone.c
	arch/mips/kernel/i8253.c
	arch/x86/kernel/i8253.c
Reason: Resolve conflicts so further cleanups do not conflict further
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'fs/sync.c')
| -rw-r--r-- | fs/sync.c | 28 | 
1 files changed, 26 insertions, 2 deletions
diff --git a/fs/sync.c b/fs/sync.c index ba76b9623e7e..c38ec163da6c 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -7,6 +7,7 @@  #include <linux/fs.h>  #include <linux/slab.h>  #include <linux/module.h> +#include <linux/namei.h>  #include <linux/sched.h>  #include <linux/writeback.h>  #include <linux/syscalls.h> @@ -33,7 +34,7 @@ static int __sync_filesystem(struct super_block *sb, int wait)  	 * This should be safe, as we require bdi backing to actually  	 * write out data in the first place  	 */ -	if (!sb->s_bdi || sb->s_bdi == &noop_backing_dev_info) +	if (sb->s_bdi == &noop_backing_dev_info)  		return 0;  	if (sb->s_qcop && sb->s_qcop->quota_sync) @@ -79,7 +80,7 @@ EXPORT_SYMBOL_GPL(sync_filesystem);  static void sync_one_sb(struct super_block *sb, void *arg)  { -	if (!(sb->s_flags & MS_RDONLY) && sb->s_bdi) +	if (!(sb->s_flags & MS_RDONLY))  		__sync_filesystem(sb, *(int *)arg);  }  /* @@ -128,6 +129,29 @@ void emergency_sync(void)  	}  } +/* + * sync a single super + */ +SYSCALL_DEFINE1(syncfs, int, fd) +{ +	struct file *file; +	struct super_block *sb; +	int ret; +	int fput_needed; + +	file = fget_light(fd, &fput_needed); +	if (!file) +		return -EBADF; +	sb = file->f_dentry->d_sb; + +	down_read(&sb->s_umount); +	ret = sync_filesystem(sb); +	up_read(&sb->s_umount); + +	fput_light(file, fput_needed); +	return ret; +} +  /**   * vfs_fsync_range - helper to sync a range of data & metadata to disk   * @file:		file to sync  | 
