public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 5/13] O_DIRECT open check
@ 2002-07-17  5:29 Andrew Morton
  0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2002-07-17  5:29 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: lkml



Updated forward-port of Aodrea's O_DIRECT open() checks.  If the user
asked for O_DIRECT and the inode has no mapping or no a_ops then fail
the open up-front.



 fcntl.c |    5 ++---
 open.c  |    7 ++++---
 2 files changed, 6 insertions(+), 6 deletions(-)

--- 2.5.26/fs/fcntl.c~o_direct_open_check	Tue Jul 16 21:46:32 2002
+++ 2.5.26-akpm/fs/fcntl.c	Tue Jul 16 21:59:37 2002
@@ -245,10 +245,9 @@ static int setfl(int fd, struct file * f
 	}
 
 	if (arg & O_DIRECT) {
-		if (inode->i_mapping && inode->i_mapping->a_ops) {
-			if (!inode->i_mapping->a_ops->direct_IO)
+		if (!inode->i_mapping || !inode->i_mapping->a_ops ||
+			!inode->i_mapping->a_ops->direct_IO)
 				return -EINVAL;
-		}
 
 		/*
 		 * alloc_kiovec() can sleep and we are only serialized by
--- 2.5.26/fs/open.c~o_direct_open_check	Tue Jul 16 21:46:32 2002
+++ 2.5.26-akpm/fs/open.c	Tue Jul 16 21:59:37 2002
@@ -665,10 +665,11 @@ struct file *dentry_open(struct dentry *
 
 	/* NB: we're sure to have correct a_ops only after f_op->open */
 	if (f->f_flags & O_DIRECT) {
-		error = -EINVAL;
-		if (inode->i_mapping && inode->i_mapping->a_ops)
-			if (!inode->i_mapping->a_ops->direct_IO)
+		if (!inode->i_mapping || !inode->i_mapping->a_ops ||
+			!inode->i_mapping->a_ops->direct_IO) {
+				error = -EINVAL;
 				goto cleanup_all;
+		}
 	}
 
 	return f;

.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-07-17  5:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-07-17  5:29 [patch 5/13] O_DIRECT open check Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox