aboutsummaryrefslogtreecommitdiffstats
path: root/fs/open.c
diff options
context:
space:
mode:
authorDave Hansen <haveblue@us.ibm.com>2008-02-15 17:37:27 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2008-04-19 00:25:31 -0400
commitd57999e1527f0b0c818846dcba5a23015beb4823 (patch)
tree6cd6f1e773fb19b18531997131b0887f835dcf03 /fs/open.c
parent3925e6fc1f774048404fdd910b0345b06c699eb4 (diff)
[PATCH] do namei_flags calculation inside open_namei()
My end goal here is to make sure all users of may_open() return filps. This will ensure that we properly release mount write counts which were taken for the filp in may_open(). This patch moves the sys_open flags to namei flags calculation into fs/namei.c. We'll shortly be moving the nameidata_to_filp() calls into namei.c, and this gets the sys_open flags to a place where we can get at them when we need them. Acked-by: Al Viro <viro@ZenIV.linux.org.uk> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c22
1 files changed, 2 insertions, 20 deletions
diff --git a/fs/open.c b/fs/open.c
index 3fa4e4ffce4c..5ab3f3f079c0 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -796,31 +796,13 @@ cleanup_file:
796 return ERR_PTR(error); 796 return ERR_PTR(error);
797} 797}
798 798
799/*
800 * Note that while the flag value (low two bits) for sys_open means:
801 * 00 - read-only
802 * 01 - write-only
803 * 10 - read-write
804 * 11 - special
805 * it is changed into
806 * 00 - no permissions needed
807 * 01 - read-permission
808 * 10 - write-permission
809 * 11 - read-write
810 * for the internal routines (ie open_namei()/follow_link() etc). 00 is
811 * used by symlinks.
812 */
813static struct file *do_filp_open(int dfd, const char *filename, int flags, 799static struct file *do_filp_open(int dfd, const char *filename, int flags,
814 int mode) 800 int mode)
815{ 801{
816 int namei_flags, error; 802 int error;
817 struct nameidata nd; 803 struct nameidata nd;
818 804
819 namei_flags = flags; 805 error = open_namei(dfd, filename, flags, mode, &nd);
820 if ((namei_flags+1) & O_ACCMODE)
821 namei_flags++;
822
823 error = open_namei(dfd, filename, namei_flags, mode, &nd);
824 if (!error) 806 if (!error)
825 return nameidata_to_filp(&nd, flags); 807 return nameidata_to_filp(&nd, flags);
826 808