[patch 5/13] O_DIRECT open check

From: Andrew Morton (akpm@zip.com.au)
Date: Wed Jul 17 2002 - 00:29:44 EST


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/



This archive was generated by hypermail 2b29 : Tue Jul 23 2002 - 22:00:22 EST