All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anand Avati <avati-+FkPdpiNhgJBDgjK7y7TUQ@public.gmane.org>
To: <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org>
Cc: fuse-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Anand Avati <avati-+FkPdpiNhgJBDgjK7y7TUQ@public.gmane.org>
Subject: [PATCH 2/2] fuse: permit O_DIRECT flag in open()
Date: Fri, 22 Jul 2011 01:33:26 -0700	[thread overview]
Message-ID: <1311323606-15040-2-git-send-email-avati@gluster.com> (raw)
In-Reply-To: <1311323606-15040-1-git-send-email-avati-+FkPdpiNhgJBDgjK7y7TUQ@public.gmane.org>

but do not permit setting of O_DIRECT flag via fcntl() (or unsetting)
---
 fs/fuse/file.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 82a6646..f30a7c6 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -154,6 +154,18 @@ int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
 		return err;
 	}
 
+        if (file->f_flags & O_DIRECT) {
+                /* set fuse_direct_io_file_operations as fops in
+                   fuse_finish_open as though the FS enforced direct_io
+                */
+                outarg.open_flags |= FOPEN_DIRECT_IO;
+
+                /* make VFS believe we don't support O_DIRECT till we
+                   implement a_ops->direct_IO
+                */
+                file->f_flags &= ~O_DIRECT;
+        }
+
 	if (isdir)
 		outarg.open_flags &= ~FOPEN_DIRECT_IO;
 
@@ -193,10 +205,6 @@ int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
 	struct fuse_conn *fc = get_fuse_conn(inode);
 	int err;
 
-	/* VFS checks this, but only _after_ ->open() */
-	if (file->f_flags & O_DIRECT)
-		return -EINVAL;
-
 	err = generic_file_open(inode, file);
 	if (err)
 		return err;
@@ -2132,6 +2140,15 @@ int fuse_notify_poll_wakeup(struct fuse_conn *fc,
 	return 0;
 }
 
+
+static int fuse_check_flags(struct file *filp, int flags)
+{
+        if ((filp->f_flags ^ flags) & O_DIRECT)
+                return -EINVAL;
+	return 0;
+}
+
+
 static const struct file_operations fuse_file_operations = {
 	.llseek		= fuse_file_llseek,
 	.read		= do_sync_read,
@@ -2149,6 +2166,7 @@ static const struct file_operations fuse_file_operations = {
 	.unlocked_ioctl	= fuse_file_ioctl,
 	.compat_ioctl	= fuse_file_compat_ioctl,
 	.poll		= fuse_file_poll,
+        .check_flags    = fuse_check_flags,
 };
 
 static const struct file_operations fuse_direct_io_file_operations = {
@@ -2165,6 +2183,7 @@ static const struct file_operations fuse_direct_io_file_operations = {
 	.unlocked_ioctl	= fuse_file_ioctl,
 	.compat_ioctl	= fuse_file_compat_ioctl,
 	.poll		= fuse_file_poll,
+        .check_flags    = fuse_check_flags,
 	/* no splice_read */
 };
 
-- 
1.7.4.4


------------------------------------------------------------------------------
10 Tips for Better Web Security
Learn 10 ways to better secure your business today. Topics covered include:
Web security, SSL, hacker attacks & Denial of Service (DoS), private keys,
security Microsoft Exchange, secure Instant Messaging, and much more.
http://www.accelacomm.com/jaw/sfnl/114/51426210/

WARNING: multiple messages have this Message-ID (diff)
From: Anand Avati <avati@gluster.com>
To: <miklos@szeredi.hu>
Cc: <fuse-devel@lists.sourceforge.net>,
	<linux-fsdevel@vger.kernel.org>, <linux-nfs@vger.kernel.org>,
	Anand Avati <avati@gluster.com>
Subject: [PATCH 2/2] fuse: permit O_DIRECT flag in open()
Date: Fri, 22 Jul 2011 01:33:26 -0700	[thread overview]
Message-ID: <1311323606-15040-2-git-send-email-avati@gluster.com> (raw)
In-Reply-To: <1311323606-15040-1-git-send-email-avati@gluster.com>

but do not permit setting of O_DIRECT flag via fcntl() (or unsetting)
---
 fs/fuse/file.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 82a6646..f30a7c6 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -154,6 +154,18 @@ int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file,
 		return err;
 	}
 
+        if (file->f_flags & O_DIRECT) {
+                /* set fuse_direct_io_file_operations as fops in
+                   fuse_finish_open as though the FS enforced direct_io
+                */
+                outarg.open_flags |= FOPEN_DIRECT_IO;
+
+                /* make VFS believe we don't support O_DIRECT till we
+                   implement a_ops->direct_IO
+                */
+                file->f_flags &= ~O_DIRECT;
+        }
+
 	if (isdir)
 		outarg.open_flags &= ~FOPEN_DIRECT_IO;
 
@@ -193,10 +205,6 @@ int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
 	struct fuse_conn *fc = get_fuse_conn(inode);
 	int err;
 
-	/* VFS checks this, but only _after_ ->open() */
-	if (file->f_flags & O_DIRECT)
-		return -EINVAL;
-
 	err = generic_file_open(inode, file);
 	if (err)
 		return err;
@@ -2132,6 +2140,15 @@ int fuse_notify_poll_wakeup(struct fuse_conn *fc,
 	return 0;
 }
 
+
+static int fuse_check_flags(struct file *filp, int flags)
+{
+        if ((filp->f_flags ^ flags) & O_DIRECT)
+                return -EINVAL;
+	return 0;
+}
+
+
 static const struct file_operations fuse_file_operations = {
 	.llseek		= fuse_file_llseek,
 	.read		= do_sync_read,
@@ -2149,6 +2166,7 @@ static const struct file_operations fuse_file_operations = {
 	.unlocked_ioctl	= fuse_file_ioctl,
 	.compat_ioctl	= fuse_file_compat_ioctl,
 	.poll		= fuse_file_poll,
+        .check_flags    = fuse_check_flags,
 };
 
 static const struct file_operations fuse_direct_io_file_operations = {
@@ -2165,6 +2183,7 @@ static const struct file_operations fuse_direct_io_file_operations = {
 	.unlocked_ioctl	= fuse_file_ioctl,
 	.compat_ioctl	= fuse_file_compat_ioctl,
 	.poll		= fuse_file_poll,
+        .check_flags    = fuse_check_flags,
 	/* no splice_read */
 };
 
-- 
1.7.4.4


  parent reply	other threads:[~2011-07-22  8:33 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-22  8:33 [PATCH 1/2] vfs: pass 'struct file *' as parameter to ->check_flags() methods Anand Avati
2011-07-22  8:33 ` Anand Avati
     [not found] ` <1311323606-15040-1-git-send-email-avati-+FkPdpiNhgJBDgjK7y7TUQ@public.gmane.org>
2011-07-22  8:33   ` Anand Avati [this message]
2011-07-22  8:33     ` [PATCH 2/2] fuse: permit O_DIRECT flag in open() Anand Avati
2011-07-22 13:33     ` Miklos Szeredi
     [not found]       ` <87livqfnin.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
2011-07-22 15:02         ` Stef Bon
2011-07-22 15:02           ` Stef Bon
2011-07-22 13:26   ` [PATCH 1/2] vfs: pass 'struct file *' as parameter to ->check_flags() methods Miklos Szeredi
2011-07-22 13:26     ` Miklos Szeredi

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=1311323606-15040-2-git-send-email-avati@gluster.com \
    --to=avati-+fkpdpinhgjbdgjk7y7tuq@public.gmane.org \
    --cc=fuse-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org \
    /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: link
Be 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.