From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric W. Biederman" Subject: [PATCH 21/23] vfs: Teach fsync to use file_hotplug_lock Date: Mon, 1 Jun 2009 14:50:46 -0700 Message-ID: <1243893048-17031-21-git-send-email-ebiederm@xmission.com> References: Cc: , , , , Hugh Dickins , Tejun Heo , Alexey Dobriyan , Linus Torvalds , Alan Cox , Greg Kroah-Hartman , Nick Piggin , Andrew Morton , Christoph Hellwig , "Eric W. Biederman" , "Eric W. Biederman" To: Al Viro Return-path: Received: from out01.mta.xmission.com ([166.70.13.231]:43450 "EHLO out01.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754951AbZFAVvB (ORCPT ); Mon, 1 Jun 2009 17:51:01 -0400 In-Reply-To: Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: Eric W. Biederman Signed-off-by: Eric W. Biederman --- fs/sync.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/fs/sync.c b/fs/sync.c index e9d56f6..ac6da60 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -197,6 +197,9 @@ int vfs_fsync(struct file *file, struct dentry *dentry, int datasync) * don't have a struct file available. Damn nfsd.. */ if (file) { + ret = -EIO; + if (!file_hotplug_read_trylock(file)) + goto out; mapping = file->f_mapping; fop = file->f_op; } else { @@ -206,7 +209,7 @@ int vfs_fsync(struct file *file, struct dentry *dentry, int datasync) if (!fop || !fop->fsync) { ret = -EINVAL; - goto out; + goto out_unlock; } ret = filemap_fdatawrite(mapping); @@ -223,6 +226,10 @@ int vfs_fsync(struct file *file, struct dentry *dentry, int datasync) err = filemap_fdatawait(mapping); if (!ret) ret = err; + +out_unlock: + if (file) + file_hotplug_read_unlock(file); out: return ret; } -- 1.6.3.1.54.g99dd.dirty