diff options
author | Dave Hansen <haveblue@us.ibm.com> | 2008-02-15 17:37:27 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-04-19 00:25:31 -0400 |
commit | d57999e1527f0b0c818846dcba5a23015beb4823 (patch) | |
tree | 6cd6f1e773fb19b18531997131b0887f835dcf03 /fs/open.c | |
parent | 3925e6fc1f774048404fdd910b0345b06c699eb4 (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.c | 22 |
1 files changed, 2 insertions, 20 deletions
@@ -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 | */ | ||
813 | static struct file *do_filp_open(int dfd, const char *filename, int flags, | 799 | static 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 | ||