lkml.org 
[lkml]   [2002]   [Jul]   [17]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateTue, 16 Jul 2002 22:29:44 -0700
FromAndrew Morton <>
Subject[patch 5/13] O_DIRECT open check

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;
.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:27    [from the cache]
©2003-2008