From: Maxim Patlasov <MPatlasov@parallels.com> To: miklos@szeredi.hu Cc: riel@redhat.com, dev@parallels.com, xemul@parallels.com, fuse-devel@lists.sourceforge.net, bfoster@redhat.com, linux-kernel@vger.kernel.org, jbottomley@parallels.com, linux-mm@kvack.org, viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, akpm@linux-foundation.org, fengguang.wu@intel.com, devel@openvz.org, mgorman@suse.de Subject: [PATCH 13/16] fuse: fuse_flush() should wait on writeback Date: Sat, 29 Jun 2013 21:46:28 +0400 [thread overview] Message-ID: <20130629174612.20175.15469.stgit@maximpc.sw.ru> (raw) In-Reply-To: <20130629172211.20175.70154.stgit@maximpc.sw.ru> The aim of .flush fop is to hint file-system that flushing its state or caches or any other important data to reliable storage would be desirable now. fuse_flush() passes this hint by sending FUSE_FLUSH request to userspace. However, dirty pages and pages under writeback may be not visible to userspace yet if we won't ensure it explicitly. Signed-off-by: Maxim Patlasov <MPatlasov@parallels.com> --- fs/fuse/file.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index f48f796..86ef60f 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -19,6 +19,7 @@ #include <linux/falloc.h> static const struct file_operations fuse_direct_io_file_operations; +static void fuse_sync_writes(struct inode *inode); static int fuse_send_open(struct fuse_conn *fc, u64 nodeid, struct file *file, int opcode, struct fuse_open_out *outargp) @@ -400,6 +401,14 @@ static int fuse_flush(struct file *file, fl_owner_t id) if (fc->no_flush) return 0; + err = filemap_write_and_wait(file->f_mapping); + if (err) + return err; + + mutex_lock(&inode->i_mutex); + fuse_sync_writes(inode); + mutex_unlock(&inode->i_mutex); + req = fuse_get_req_nofail_nopages(fc, file); memset(&inarg, 0, sizeof(inarg)); inarg.fh = ff->fh;
WARNING: multiple messages have this Message-ID (diff)
From: Maxim Patlasov <MPatlasov@parallels.com> To: miklos@szeredi.hu Cc: riel@redhat.com, dev@parallels.com, xemul@parallels.com, fuse-devel@lists.sourceforge.net, bfoster@redhat.com, linux-kernel@vger.kernel.org, jbottomley@parallels.com, linux-mm@kvack.org, viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, akpm@linux-foundation.org, fengguang.wu@intel.com, devel@openvz.org, mgorman@suse.de Subject: [PATCH 13/16] fuse: fuse_flush() should wait on writeback Date: Sat, 29 Jun 2013 21:46:28 +0400 [thread overview] Message-ID: <20130629174612.20175.15469.stgit@maximpc.sw.ru> (raw) In-Reply-To: <20130629172211.20175.70154.stgit@maximpc.sw.ru> The aim of .flush fop is to hint file-system that flushing its state or caches or any other important data to reliable storage would be desirable now. fuse_flush() passes this hint by sending FUSE_FLUSH request to userspace. However, dirty pages and pages under writeback may be not visible to userspace yet if we won't ensure it explicitly. Signed-off-by: Maxim Patlasov <MPatlasov@parallels.com> --- fs/fuse/file.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index f48f796..86ef60f 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -19,6 +19,7 @@ #include <linux/falloc.h> static const struct file_operations fuse_direct_io_file_operations; +static void fuse_sync_writes(struct inode *inode); static int fuse_send_open(struct fuse_conn *fc, u64 nodeid, struct file *file, int opcode, struct fuse_open_out *outargp) @@ -400,6 +401,14 @@ static int fuse_flush(struct file *file, fl_owner_t id) if (fc->no_flush) return 0; + err = filemap_write_and_wait(file->f_mapping); + if (err) + return err; + + mutex_lock(&inode->i_mutex); + fuse_sync_writes(inode); + mutex_unlock(&inode->i_mutex); + req = fuse_get_req_nofail_nopages(fc, file); memset(&inarg, 0, sizeof(inarg)); inarg.fh = ff->fh; -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-06-29 17:46 UTC|newest] Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-06-29 17:41 [PATCH v5 00/16] fuse: An attempt to implement a write-back cache policy Maxim Patlasov 2013-06-29 17:41 ` Maxim Patlasov 2013-06-29 17:42 ` [PATCH 01/16] fuse: Linking file to inode helper Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:42 ` [PATCH 02/16] fuse: Getting file for writeback helper Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:42 ` [PATCH 03/16] fuse: Prepare to handle short reads Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:42 ` [PATCH 04/16] fuse: Prepare to handle multiple pages in writeback Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:42 ` [PATCH 05/16] fuse: Connection bit for enabling writeback Maxim Patlasov 2013-06-29 17:42 ` Maxim Patlasov 2013-06-29 17:44 ` [PATCH 06/16] fuse: Trust kernel i_size only - v4 Maxim Patlasov 2013-06-29 17:44 ` Maxim Patlasov 2013-06-29 17:44 ` [PATCH 07/16] fuse: Trust kernel i_mtime only Maxim Patlasov 2013-06-29 17:44 ` Maxim Patlasov 2013-07-11 16:14 ` [PATCH 07/16] fuse: Trust kernel i_mtime only -v2 Maxim Patlasov 2013-06-29 17:45 ` [PATCH 08/16] fuse: Flush files on wb close Maxim Patlasov 2013-06-29 17:45 ` Maxim Patlasov 2013-07-11 16:18 ` [PATCH 08/16] fuse: Flush files on wb close -v2 Maxim Patlasov 2013-06-29 17:45 ` [PATCH 09/16] fuse: restructure fuse_readpage() Maxim Patlasov 2013-06-29 17:45 ` Maxim Patlasov 2013-06-29 17:45 ` Maxim Patlasov 2013-06-29 17:45 ` [PATCH 10/16] fuse: Implement writepages callback Maxim Patlasov 2013-06-29 17:45 ` Maxim Patlasov 2013-07-19 16:50 ` Miklos Szeredi 2013-07-19 16:50 ` Miklos Szeredi 2013-08-02 15:40 ` Maxim Patlasov 2013-08-02 15:40 ` Maxim Patlasov 2013-08-02 15:40 ` Maxim Patlasov 2013-08-06 16:25 ` Miklos Szeredi 2013-08-06 16:25 ` Miklos Szeredi 2013-08-06 16:26 ` Eric Boxer 2013-08-09 15:02 ` Maxim Patlasov 2013-08-09 15:02 ` Maxim Patlasov 2013-08-09 15:02 ` Maxim Patlasov 2013-08-30 10:12 ` Miklos Szeredi 2013-08-30 10:12 ` Miklos Szeredi 2013-08-30 10:12 ` Miklos Szeredi 2013-08-30 14:50 ` Maxim Patlasov 2013-08-30 14:50 ` Maxim Patlasov 2013-08-30 14:50 ` Maxim Patlasov 2013-09-03 10:31 ` Miklos Szeredi 2013-09-03 10:31 ` Miklos Szeredi 2013-09-03 10:31 ` Miklos Szeredi 2013-09-03 16:02 ` Maxim Patlasov 2013-09-03 16:02 ` Maxim Patlasov 2013-09-03 16:02 ` Maxim Patlasov 2013-06-29 17:45 ` [PATCH 11/16] fuse: Implement write_begin/write_end callbacks Maxim Patlasov 2013-06-29 17:45 ` Maxim Patlasov 2013-06-29 17:46 ` [PATCH 12/16] fuse: fuse_writepage_locked() should wait on writeback Maxim Patlasov 2013-06-29 17:46 ` Maxim Patlasov 2013-06-29 17:46 ` Maxim Patlasov [this message] 2013-06-29 17:46 ` [PATCH 13/16] fuse: fuse_flush() " Maxim Patlasov 2013-06-29 17:46 ` [PATCH 14/16] fuse: Fix O_DIRECT operations vs cached writeback misorder - v2 Maxim Patlasov 2013-06-29 17:46 ` Maxim Patlasov 2013-06-29 17:47 ` [PATCH 15/16] fuse: Turn writeback cache on Maxim Patlasov 2013-06-29 17:47 ` Maxim Patlasov 2013-06-29 17:48 ` [PATCH 16/16] mm: strictlimit feature Maxim Patlasov 2013-06-29 17:48 ` Maxim Patlasov 2013-07-01 21:16 ` Andrew Morton 2013-07-01 21:16 ` Andrew Morton 2013-07-02 8:33 ` Maxim Patlasov 2013-07-02 8:33 ` Maxim Patlasov 2013-07-02 8:33 ` Maxim Patlasov 2013-07-02 17:44 ` [PATCH] mm: strictlimit feature -v2 Maxim Patlasov 2013-07-02 17:44 ` Maxim Patlasov 2013-07-02 19:38 ` Andrew Morton 2013-07-02 19:38 ` Andrew Morton 2013-07-03 11:01 ` Maxim Patlasov 2013-07-03 11:01 ` Maxim Patlasov 2013-07-03 11:01 ` Maxim Patlasov 2013-07-03 23:16 ` Jan Kara 2013-07-03 23:16 ` Jan Kara 2013-07-03 23:16 ` Jan Kara 2013-07-05 13:14 ` Maxim Patlasov 2013-07-05 13:14 ` Maxim Patlasov 2013-07-05 13:14 ` Maxim Patlasov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20130629174612.20175.15469.stgit@maximpc.sw.ru \ --to=mpatlasov@parallels.com \ --cc=akpm@linux-foundation.org \ --cc=bfoster@redhat.com \ --cc=dev@parallels.com \ --cc=devel@openvz.org \ --cc=fengguang.wu@intel.com \ --cc=fuse-devel@lists.sourceforge.net \ --cc=jbottomley@parallels.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=miklos@szeredi.hu \ --cc=riel@redhat.com \ --cc=viro@zeniv.linux.org.uk \ --cc=xemul@parallels.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.