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