From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boaz Harrosh Subject: [PATCH] exofs: exofs_file_fsync correctness Date: Tue, 01 Jun 2010 18:30:55 +0300 Message-ID: <4C0527AF.6090502@panasas.com> References: <20100531100927.GA11149@lst.de> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: linux-fsdevel@vger.kernel.org, open-osd To: Christoph Hellwig Return-path: Received: from daytona.panasas.com ([67.152.220.89]:55869 "EHLO daytona.int.panasas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753078Ab0FAPa5 (ORCPT ); Tue, 1 Jun 2010 11:30:57 -0400 In-Reply-To: <20100531100927.GA11149@lst.de> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: As per Christoph advise: no need to call filemap_write_and_wait(). In exofs all metadata is at the inode so just writing the pages and inode is all is needed. fsync implies this must be done synchronously. FIXME: remove the sb_sync and fix that sb_update better. Signed-off-by: Boaz Harrosh --- fs/exofs/file.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-) diff --git a/fs/exofs/file.c b/fs/exofs/file.c index f9bfe2b..54bb17d 100644 --- a/fs/exofs/file.c +++ b/fs/exofs/file.c @@ -30,9 +30,6 @@ * along with exofs; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -#include - #include "exofs.h" static int exofs_release_file(struct inode *inode, struct file *filp) @@ -40,19 +37,25 @@ static int exofs_release_file(struct inode *inode, struct file *filp) return 0; } +/* exofs_file_fsync - flush the inode to disk + * + * @datasync is not used. All metadata is written in one place regardless. + * the writeout is synchronous + */ static int exofs_file_fsync(struct file *filp, int datasync) { int ret; struct address_space *mapping = filp->f_mapping; struct inode *inode = mapping->host; struct super_block *sb; + struct writeback_control wbc = { + .sync_mode = WB_SYNC_ALL, + .nr_to_write = LONG_MAX, + .range_start = 0, + .range_end = LLONG_MAX, + }; - ret = filemap_write_and_wait(mapping); - if (ret) - return ret; - - /* sync the inode attributes */ - ret = write_inode_now(inode, 1); + ret = sync_inode(inode, &wbc); /* This is a good place to write the sb */ /* TODO: Sechedule an sb-sync on create */ -- 1.6.6.1