* [PATCH 0/8] filesystem related cleanups and fixes
@ 2005-08-23 20:22 Miklos Szeredi
2005-08-23 20:24 ` [PATCH 1/8] remove ia_attr_flags Miklos Szeredi
0 siblings, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:22 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Hi Andrew!
The following patches are small cleanups and fixes, I hope none of
them are too controversial.
It's probably safe to apply ;)
Miklos
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/8] remove ia_attr_flags
2005-08-23 20:22 [PATCH 0/8] filesystem related cleanups and fixes Miklos Szeredi
@ 2005-08-23 20:24 ` Miklos Szeredi
2005-08-23 20:26 ` [PATCH 2/8] namei cleanup Miklos Szeredi
2005-08-24 7:32 ` [PATCH 1/8] remove ia_attr_flags Christoph Hellwig
0 siblings, 2 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:24 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Remove unused ia_attr_flags from struct iattr, and related defines.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/hostfs/hostfs.h
===================================================================
--- linux.orig/fs/hostfs/hostfs.h 2005-08-19 14:13:47.000000000 +0200
+++ linux/fs/hostfs/hostfs.h 2005-08-19 15:01:48.000000000 +0200
@@ -49,7 +49,6 @@ struct hostfs_iattr {
struct timespec ia_atime;
struct timespec ia_mtime;
struct timespec ia_ctime;
- unsigned int ia_attr_flags;
};
extern int stat_file(const char *path, unsigned long long *inode_out,
Index: linux/include/linux/fs.h
===================================================================
--- linux.orig/include/linux/fs.h 2005-08-19 14:58:53.000000000 +0200
+++ linux/include/linux/fs.h 2005-08-19 15:01:06.000000000 +0200
@@ -283,19 +283,9 @@ struct iattr {
struct timespec ia_atime;
struct timespec ia_mtime;
struct timespec ia_ctime;
- unsigned int ia_attr_flags;
};
/*
- * This is the inode attributes flag definitions
- */
-#define ATTR_FLAG_SYNCRONOUS 1 /* Syncronous write */
-#define ATTR_FLAG_NOATIME 2 /* Don't update atime */
-#define ATTR_FLAG_APPEND 4 /* Append-only file */
-#define ATTR_FLAG_IMMUTABLE 8 /* Immutable file */
-#define ATTR_FLAG_NODIRATIME 16 /* Don't update atime for directory */
-
-/*
* Includes for diskquotas.
*/
#include <linux/quota.h>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 2/8] namei cleanup
2005-08-23 20:24 ` [PATCH 1/8] remove ia_attr_flags Miklos Szeredi
@ 2005-08-23 20:26 ` Miklos Szeredi
2005-08-23 20:30 ` [PATCH 3/8] use get_fs_struct() in proc Miklos Szeredi
2005-08-23 20:33 ` [PATCH 2/8] namei cleanup Al Viro
2005-08-24 7:32 ` [PATCH 1/8] remove ia_attr_flags Christoph Hellwig
1 sibling, 2 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:26 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel, viro
Extract common code into inline functions to make reading easier.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/namei.c
===================================================================
--- linux.orig/fs/namei.c 2005-08-23 20:25:53.000000000 +0200
+++ linux/fs/namei.c 2005-08-23 21:00:02.000000000 +0200
@@ -525,6 +525,22 @@ static inline int __do_follow_link(struc
return error;
}
+static inline void dput_path(struct path *path, struct nameidata *nd)
+{
+ dput(path->dentry);
+ if (path->mnt != nd->mnt)
+ mntput(path->mnt);
+}
+
+static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
+{
+ dput(nd->dentry);
+ if (nd->mnt != path->mnt)
+ mntput(nd->mnt);
+ nd->mnt = path->mnt;
+ nd->dentry = path->dentry;
+}
+
/*
* This limits recursive symlink follows to 8, while
* limiting consecutive symlinks to 40.
@@ -552,9 +568,7 @@ static inline int do_follow_link(struct
nd->depth--;
return err;
loop:
- dput(path->dentry);
- if (path->mnt != nd->mnt)
- mntput(path->mnt);
+ dput_path(path, nd);
path_release(nd);
return err;
}
@@ -813,13 +827,8 @@ static fastcall int __link_path_walk(con
err = -ENOTDIR;
if (!inode->i_op)
break;
- } else {
- dput(nd->dentry);
- if (nd->mnt != next.mnt)
- mntput(nd->mnt);
- nd->mnt = next.mnt;
- nd->dentry = next.dentry;
- }
+ } else
+ path_to_nameidata(&next, nd);
err = -ENOTDIR;
if (!inode->i_op->lookup)
break;
@@ -859,13 +868,8 @@ last_component:
if (err)
goto return_err;
inode = nd->dentry->d_inode;
- } else {
- dput(nd->dentry);
- if (nd->mnt != next.mnt)
- mntput(nd->mnt);
- nd->mnt = next.mnt;
- nd->dentry = next.dentry;
- }
+ } else
+ path_to_nameidata(&next, nd);
err = -ENOENT;
if (!inode)
break;
@@ -901,9 +905,7 @@ return_reval:
return_base:
return 0;
out_dput:
- dput(next.dentry);
- if (nd->mnt != next.mnt)
- mntput(next.mnt);
+ dput_path(&next, nd);
break;
}
path_release(nd);
@@ -1505,11 +1507,7 @@ do_last:
if (path.dentry->d_inode->i_op && path.dentry->d_inode->i_op->follow_link)
goto do_link;
- dput(nd->dentry);
- nd->dentry = path.dentry;
- if (nd->mnt != path.mnt)
- mntput(nd->mnt);
- nd->mnt = path.mnt;
+ path_to_nameidata(&path, nd);
error = -EISDIR;
if (path.dentry->d_inode && S_ISDIR(path.dentry->d_inode->i_mode))
goto exit;
@@ -1520,9 +1518,7 @@ ok:
return 0;
exit_dput:
- dput(path.dentry);
- if (nd->mnt != path.mnt)
- mntput(path.mnt);
+ dput_path(&path, nd);
exit:
path_release(nd);
return error;
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 3/8] use get_fs_struct() in proc
2005-08-23 20:26 ` [PATCH 2/8] namei cleanup Miklos Szeredi
@ 2005-08-23 20:30 ` Miklos Szeredi
2005-08-23 20:33 ` [PATCH 4/8] fix enum pid_directory_inos in proc/base.c Miklos Szeredi
2005-08-23 20:33 ` [PATCH 2/8] namei cleanup Al Viro
1 sibling, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:30 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
This patch cleans up proc_cwd_link() and proc_root_link() by factoring
out common code into get_fs_struct().
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/proc/base.c
===================================================================
--- linux.orig/fs/proc/base.c 2005-08-19 14:47:20.000000000 +0200
+++ linux/fs/proc/base.c 2005-08-19 14:47:35.000000000 +0200
@@ -298,15 +298,21 @@ static int proc_fd_link(struct inode *in
return -ENOENT;
}
-static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
+static struct fs_struct *get_fs_struct(struct task_struct *task)
{
struct fs_struct *fs;
- int result = -ENOENT;
- task_lock(proc_task(inode));
- fs = proc_task(inode)->fs;
+ task_lock(task);
+ fs = task->fs;
if(fs)
atomic_inc(&fs->count);
- task_unlock(proc_task(inode));
+ task_unlock(task);
+ return fs;
+}
+
+static int proc_cwd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
+{
+ struct fs_struct *fs = get_fs_struct(proc_task(inode));
+ int result = -ENOENT;
if (fs) {
read_lock(&fs->lock);
*mnt = mntget(fs->pwdmnt);
@@ -320,13 +326,8 @@ static int proc_cwd_link(struct inode *i
static int proc_root_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
{
- struct fs_struct *fs;
+ struct fs_struct *fs = get_fs_struct(proc_task(inode));
int result = -ENOENT;
- task_lock(proc_task(inode));
- fs = proc_task(inode)->fs;
- if(fs)
- atomic_inc(&fs->count);
- task_unlock(proc_task(inode));
if (fs) {
read_lock(&fs->lock);
*mnt = mntget(fs->rootmnt);
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 4/8] fix enum pid_directory_inos in proc/base.c
2005-08-23 20:30 ` [PATCH 3/8] use get_fs_struct() in proc Miklos Szeredi
@ 2005-08-23 20:33 ` Miklos Szeredi
2005-08-23 20:36 ` [PATCH 5/8] remove duplicated code from proc and ptrace Miklos Szeredi
0 siblings, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:33 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
This patch fixes wrongly placed elements in the pid_directory_inos
enum. Also add comment so this mistake is not repeated.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/proc/base.c
===================================================================
--- linux.orig/fs/proc/base.c 2005-08-19 14:47:35.000000000 +0200
+++ linux/fs/proc/base.c 2005-08-19 14:47:36.000000000 +0200
@@ -120,7 +120,6 @@ enum pid_directory_inos {
#ifdef CONFIG_AUDITSYSCALL
PROC_TGID_LOGINUID,
#endif
- PROC_TGID_FD_DIR,
PROC_TGID_OOM_SCORE,
PROC_TGID_OOM_ADJUST,
PROC_TID_INO,
@@ -159,9 +158,11 @@ enum pid_directory_inos {
#ifdef CONFIG_AUDITSYSCALL
PROC_TID_LOGINUID,
#endif
- PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */
PROC_TID_OOM_SCORE,
PROC_TID_OOM_ADJUST,
+
+ /* Add new entries before this */
+ PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */
};
struct pid_entry {
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/8] namei cleanup
2005-08-23 20:26 ` [PATCH 2/8] namei cleanup Miklos Szeredi
2005-08-23 20:30 ` [PATCH 3/8] use get_fs_struct() in proc Miklos Szeredi
@ 2005-08-23 20:33 ` Al Viro
2005-08-23 20:50 ` Miklos Szeredi
1 sibling, 1 reply; 17+ messages in thread
From: Al Viro @ 2005-08-23 20:33 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: akpm, linux-kernel
On Tue, Aug 23, 2005 at 10:26:53PM +0200, Miklos Szeredi wrote:
Bad names, IMO.
> +static inline void dput_path(struct path *path, struct nameidata *nd)
> +{
> + dput(path->dentry);
> + if (path->mnt != nd->mnt)
> + mntput(path->mnt);
> +}
> +
> +static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
> +{
> + dput(nd->dentry);
> + if (nd->mnt != path->mnt)
> + mntput(nd->mnt);
> + nd->mnt = path->mnt;
> + nd->dentry = path->dentry;
> +}
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 5/8] remove duplicated code from proc and ptrace
2005-08-23 20:33 ` [PATCH 4/8] fix enum pid_directory_inos in proc/base.c Miklos Szeredi
@ 2005-08-23 20:36 ` Miklos Szeredi
2005-08-23 20:43 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Miklos Szeredi
0 siblings, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:36 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Extract common code used by ptrace_attach() and may_ptrace_attach()
into a separate function.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/kernel/ptrace.c
===================================================================
--- linux.orig/kernel/ptrace.c 2005-08-19 14:47:20.000000000 +0200
+++ linux/kernel/ptrace.c 2005-08-19 14:47:36.000000000 +0200
@@ -118,6 +118,33 @@ int ptrace_check_attach(struct task_stru
return ret;
}
+static int may_attach(struct task_struct *task)
+{
+ if (!task->mm)
+ return -EPERM;
+ if (((current->uid != task->euid) ||
+ (current->uid != task->suid) ||
+ (current->uid != task->uid) ||
+ (current->gid != task->egid) ||
+ (current->gid != task->sgid) ||
+ (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
+ return -EPERM;
+ smp_rmb();
+ if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
+ return -EPERM;
+
+ return security_ptrace(current, task);
+}
+
+int ptrace_may_attach(struct task_struct *task)
+{
+ int err;
+ task_lock(task);
+ err = may_attach(task);
+ task_unlock(task);
+ return !err;
+}
+
int ptrace_attach(struct task_struct *task)
{
int retval;
@@ -127,22 +154,10 @@ int ptrace_attach(struct task_struct *ta
goto bad;
if (task == current)
goto bad;
- if (!task->mm)
- goto bad;
- if(((current->uid != task->euid) ||
- (current->uid != task->suid) ||
- (current->uid != task->uid) ||
- (current->gid != task->egid) ||
- (current->gid != task->sgid) ||
- (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
- goto bad;
- smp_rmb();
- if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
- goto bad;
/* the same process cannot be attached many times */
if (task->ptrace & PT_PTRACED)
goto bad;
- retval = security_ptrace(current, task);
+ retval = may_attach(task);
if (retval)
goto bad;
Index: linux/include/linux/ptrace.h
===================================================================
--- linux.orig/include/linux/ptrace.h 2005-08-19 14:47:20.000000000 +0200
+++ linux/include/linux/ptrace.h 2005-08-19 14:47:36.000000000 +0200
@@ -90,6 +90,7 @@ extern void __ptrace_link(struct task_st
struct task_struct *new_parent);
extern void __ptrace_unlink(struct task_struct *child);
extern void ptrace_untrace(struct task_struct *child);
+extern int ptrace_may_attach(struct task_struct *task);
static inline void ptrace_link(struct task_struct *child,
struct task_struct *new_parent)
Index: linux/fs/proc/base.c
===================================================================
--- linux.orig/fs/proc/base.c 2005-08-19 14:47:36.000000000 +0200
+++ linux/fs/proc/base.c 2005-08-19 14:47:36.000000000 +0200
@@ -347,33 +347,6 @@ static int proc_root_link(struct inode *
(task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
security_ptrace(current,task) == 0))
-static int may_ptrace_attach(struct task_struct *task)
-{
- int retval = 0;
-
- task_lock(task);
-
- if (!task->mm)
- goto out;
- if (((current->uid != task->euid) ||
- (current->uid != task->suid) ||
- (current->uid != task->uid) ||
- (current->gid != task->egid) ||
- (current->gid != task->sgid) ||
- (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
- goto out;
- rmb();
- if (task->mm->dumpable != 1 && !capable(CAP_SYS_PTRACE))
- goto out;
- if (security_ptrace(current, task))
- goto out;
-
- retval = 1;
-out:
- task_unlock(task);
- return retval;
-}
-
static int proc_pid_environ(struct task_struct *task, char * buffer)
{
int res = 0;
@@ -383,7 +356,7 @@ static int proc_pid_environ(struct task_
if (len > PAGE_SIZE)
len = PAGE_SIZE;
res = access_process_vm(task, mm->env_start, buffer, len, 0);
- if (!may_ptrace_attach(task))
+ if (!ptrace_may_attach(task))
res = -ESRCH;
mmput(mm);
}
@@ -686,7 +659,7 @@ static ssize_t mem_read(struct file * fi
int ret = -ESRCH;
struct mm_struct *mm;
- if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
goto out;
ret = -ENOMEM;
@@ -712,7 +685,7 @@ static ssize_t mem_read(struct file * fi
this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
retval = access_process_vm(task, src, page, this_len, 0);
- if (!retval || !MAY_PTRACE(task) || !may_ptrace_attach(task)) {
+ if (!retval || !MAY_PTRACE(task) || !ptrace_may_attach(task)) {
if (!ret)
ret = -EIO;
break;
@@ -750,7 +723,7 @@ static ssize_t mem_write(struct file * f
struct task_struct *task = proc_task(file->f_dentry->d_inode);
unsigned long dst = *ppos;
- if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
return -ESRCH;
page = (char *)__get_free_page(GFP_USER);
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-23 20:36 ` [PATCH 5/8] remove duplicated code from proc and ptrace Miklos Szeredi
@ 2005-08-23 20:43 ` Miklos Szeredi
2005-08-23 20:45 ` [PATCH 7/8] cifs_create() fix Miklos Szeredi
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:43 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
64 bit architectures all implement their own compatibility sys_open(),
when in fact the difference is simply not forcing the O_LARGEFILE
flag. So use the a common function instead.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/include/linux/fs.h
===================================================================
--- linux.orig/include/linux/fs.h 2005-08-23 21:00:01.000000000 +0200
+++ linux/include/linux/fs.h 2005-08-23 21:00:18.000000000 +0200
@@ -1286,6 +1286,7 @@ static inline int break_lease(struct ino
/* fs/open.c */
extern int do_truncate(struct dentry *, loff_t start);
+extern long do_sys_open(const char __user *filename, int flags, int mode);
extern struct file *filp_open(const char *, int, int);
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
extern int filp_close(struct file *, fl_owner_t id);
Index: linux/fs/open.c
===================================================================
--- linux.orig/fs/open.c 2005-08-23 20:25:54.000000000 +0200
+++ linux/fs/open.c 2005-08-23 21:00:18.000000000 +0200
@@ -938,16 +938,11 @@ void fastcall fd_install(unsigned int fd
EXPORT_SYMBOL(fd_install);
-asmlinkage long sys_open(const char __user * filename, int flags, int mode)
+long do_sys_open(const char __user *filename, int flags, int mode)
{
- char * tmp;
- int fd;
+ char *tmp = getname(filename);
+ int fd = PTR_ERR(tmp);
- if (force_o_largefile())
- flags |= O_LARGEFILE;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
if (!IS_ERR(tmp)) {
fd = get_unused_fd();
if (fd >= 0) {
@@ -964,6 +959,14 @@ asmlinkage long sys_open(const char __us
}
return fd;
}
+
+asmlinkage long sys_open(const char __user *filename, int flags, int mode)
+{
+ if (force_o_largefile())
+ flags |= O_LARGEFILE;
+
+ return do_sys_open(filename, flags, mode);
+}
EXPORT_SYMBOL_GPL(sys_open);
#ifndef __alpha__
Index: linux/arch/x86_64/ia32/sys_ia32.c
===================================================================
--- linux.orig/arch/x86_64/ia32/sys_ia32.c 2005-08-23 20:22:33.000000000 +0200
+++ linux/arch/x86_64/ia32/sys_ia32.c 2005-08-23 21:00:19.000000000 +0200
@@ -971,28 +971,7 @@ long sys32_kill(int pid, int sig)
asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
{
- char * tmp;
- int fd, error;
-
- /* don't force O_LARGEFILE */
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file *f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f)) {
- put_unused_fd(fd);
- fd = error;
- } else {
- fsnotify_open(f->f_dentry);
- fd_install(fd, f);
- }
- }
- putname(tmp);
- }
- return fd;
+ return do_sys_open(filename, flags, mode);
}
extern asmlinkage long
Index: linux/arch/ppc64/kernel/sys_ppc32.c
===================================================================
--- linux.orig/arch/ppc64/kernel/sys_ppc32.c 2005-08-23 20:22:31.000000000 +0200
+++ linux/arch/ppc64/kernel/sys_ppc32.c 2005-08-23 21:00:19.000000000 +0200
@@ -873,29 +873,7 @@ off_t ppc32_lseek(unsigned int fd, u32 o
*/
asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file * f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
+ return do_sys_open(filename, flags, mode);
}
/* Note: it is necessary to treat bufsiz as an unsigned int,
Index: linux/arch/ia64/ia32/sys_ia32.c
===================================================================
--- linux.orig/arch/ia64/ia32/sys_ia32.c 2005-06-17 21:48:29.000000000 +0200
+++ linux/arch/ia64/ia32/sys_ia32.c 2005-08-23 21:00:19.000000000 +0200
@@ -2365,29 +2365,7 @@ sys32_brk (unsigned int brk)
asmlinkage long
sys32_open (const char __user * filename, int flags, int mode)
{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file *f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
+ return do_sys_open(filename, flags, mode);
}
/* Structure for ia32 emulation on ia64 */
Index: linux/arch/sparc64/kernel/sys_sparc32.c
===================================================================
--- linux.orig/arch/sparc64/kernel/sys_sparc32.c 2005-06-17 21:48:29.000000000 +0200
+++ linux/arch/sparc64/kernel/sys_sparc32.c 2005-08-23 21:00:19.000000000 +0200
@@ -1002,29 +1002,7 @@ asmlinkage long sys32_adjtimex(struct ti
asmlinkage long sparc32_open(const char __user *filename,
int flags, int mode)
{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file * f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
+ return do_sys_open(filename, flags, mode);
}
extern unsigned long do_mremap(unsigned long addr,
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 7/8] cifs_create() fix
2005-08-23 20:43 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Miklos Szeredi
@ 2005-08-23 20:45 ` Miklos Szeredi
2005-08-23 20:47 ` [PATCH 8/8] deprecate open("foo", 3) Miklos Szeredi
2005-08-23 21:44 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Arnd Bergmann
2005-08-24 7:33 ` Christoph Hellwig
2 siblings, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:45 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel, smfrench
cifs_create() did totally the wrong thing with nd->intent.open.flags:
it interpreted nd->intent.open.flags as the original open flags, not
the one transformed for open_namei(). Also it used the intent data
even if it was not filled in (if called from sys_mknod()).
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/cifs/dir.c
===================================================================
--- linux.orig/fs/cifs/dir.c 2005-08-23 11:01:58.000000000 +0200
+++ linux/fs/cifs/dir.c 2005-08-23 11:09:03.000000000 +0200
@@ -145,24 +145,23 @@ cifs_create(struct inode *inode, struct
return -ENOMEM;
}
- if(nd) {
- if ((nd->intent.open.flags & O_ACCMODE) == O_RDONLY)
- desiredAccess = GENERIC_READ;
- else if ((nd->intent.open.flags & O_ACCMODE) == O_WRONLY) {
- desiredAccess = GENERIC_WRITE;
- write_only = TRUE;
- } else if ((nd->intent.open.flags & O_ACCMODE) == O_RDWR) {
- /* GENERIC_ALL is too much permission to request */
- /* can cause unnecessary access denied on create */
- /* desiredAccess = GENERIC_ALL; */
- desiredAccess = GENERIC_READ | GENERIC_WRITE;
+ if(nd && (nd->flags & LOOKUP_OPEN)) {
+ int oflags = nd->intent.open.flags;
+
+ desiredAccess = 0;
+ if (oflags & FMODE_READ)
+ desiredAccess |= GENERIC_READ;
+ if (oflags & FMODE_WRITE) {
+ desiredAccess |= GENERIC_WRITE;
+ if (!(oflags & FMODE_READ))
+ write_only = TRUE;
}
- if((nd->intent.open.flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
+ if((oflags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
disposition = FILE_CREATE;
- else if((nd->intent.open.flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
+ else if((oflags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC))
disposition = FILE_OVERWRITE_IF;
- else if((nd->intent.open.flags & O_CREAT) == O_CREAT)
+ else if((oflags & O_CREAT) == O_CREAT)
disposition = FILE_OPEN_IF;
else {
cFYI(1,("Create flag not set in create function"));
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 8/8] deprecate open("foo", 3)
2005-08-23 20:45 ` [PATCH 7/8] cifs_create() fix Miklos Szeredi
@ 2005-08-23 20:47 ` Miklos Szeredi
0 siblings, 0 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:47 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Deprecate access mode of '3' in open() as suggested by Linus.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/fs/open.c
===================================================================
--- linux.orig/fs/open.c 2005-08-23 13:15:49.000000000 +0200
+++ linux/fs/open.c 2005-08-23 13:16:15.000000000 +0200
@@ -756,6 +756,17 @@ struct file *filp_open(const char * file
{
int namei_flags, error;
struct nameidata nd;
+ static int warned;
+
+ /*
+ * Access mode of 3 had some old uses, that are probably not
+ * applicable anymore. For now just warn about deprecation.
+ * Later it can be changed to return -EINVAL.
+ */
+ if ((flags & O_ACCMODE) == 3 && warned < 5) {
+ warned++;
+ printk(KERN_WARNING "Warning: '%s' (pid=%i) uses deprecated open flags, please report!\n", current->comm, current->tgid);
+ }
namei_flags = flags;
if ((namei_flags+1) & O_ACCMODE)
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 2/8] namei cleanup
2005-08-23 20:33 ` [PATCH 2/8] namei cleanup Al Viro
@ 2005-08-23 20:50 ` Miklos Szeredi
0 siblings, 0 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-23 20:50 UTC (permalink / raw)
To: viro; +Cc: akpm, linux-kernel
> Bad names, IMO.
>
You're probably right. Can you suggest better ones?
Thanks,
Miklos
> > +static inline void dput_path(struct path *path, struct nameidata *nd)
> > +{
> > + dput(path->dentry);
> > + if (path->mnt != nd->mnt)
> > + mntput(path->mnt);
> > +}
> > +
> > +static inline void path_to_nameidata(struct path *path, struct nameidata *nd)
> > +{
> > + dput(nd->dentry);
> > + if (nd->mnt != path->mnt)
> > + mntput(nd->mnt);
> > + nd->mnt = path->mnt;
> > + nd->dentry = path->dentry;
> > +}
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-23 20:43 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Miklos Szeredi
2005-08-23 20:45 ` [PATCH 7/8] cifs_create() fix Miklos Szeredi
@ 2005-08-23 21:44 ` Arnd Bergmann
2005-08-24 8:58 ` Miklos Szeredi
2005-08-24 7:33 ` Christoph Hellwig
2 siblings, 1 reply; 17+ messages in thread
From: Arnd Bergmann @ 2005-08-23 21:44 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: akpm, linux-kernel
On Dinsdag 23 August 2005 22:43, Miklos Szeredi wrote:
> 64 bit architectures all implement their own compatibility sys_open(),
> when in fact the difference is simply not forcing the O_LARGEFILE
> flag. So use the a common function instead.
> Index: linux/arch/x86_64/ia32/sys_ia32.c
> ===================================================================
> --- linux.orig/arch/x86_64/ia32/sys_ia32.c 2005-08-23 20:22:33.000000000 +0200
> +++ linux/arch/x86_64/ia32/sys_ia32.c 2005-08-23 21:00:19.000000000 +0200
> @@ -971,28 +971,7 @@ long sys32_kill(int pid, int sig)
>
> asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
> {
> - char * tmp;
> - int fd, error;
Please don't leave the functions inside of the architecture specific code.
The code is common enough to be shared, so just put a new compat_sys_open()
function into fs/compat.c.
I'm also not sure wether s390, mips and/or parisc need to use the
same function instead of the standard sys_open().
Arnd <><
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/8] remove ia_attr_flags
2005-08-23 20:24 ` [PATCH 1/8] remove ia_attr_flags Miklos Szeredi
2005-08-23 20:26 ` [PATCH 2/8] namei cleanup Miklos Szeredi
@ 2005-08-24 7:32 ` Christoph Hellwig
1 sibling, 0 replies; 17+ messages in thread
From: Christoph Hellwig @ 2005-08-24 7:32 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: akpm, linux-kernel
On Tue, Aug 23, 2005 at 10:24:30PM +0200, Miklos Szeredi wrote:
> Remove unused ia_attr_flags from struct iattr, and related defines.
I had actually planned to make use of this, by adding a common helper
for the ext2-style file flags ioctl so all the checking is moved outside
the filesystems. OTOH I planned this forever and didn't get ver far,
so it's probably okay to remove it - I can put it back when needed.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-23 20:43 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Miklos Szeredi
2005-08-23 20:45 ` [PATCH 7/8] cifs_create() fix Miklos Szeredi
2005-08-23 21:44 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Arnd Bergmann
@ 2005-08-24 7:33 ` Christoph Hellwig
2005-08-24 9:00 ` Miklos Szeredi
2 siblings, 1 reply; 17+ messages in thread
From: Christoph Hellwig @ 2005-08-24 7:33 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: akpm, linux-kernel
On Tue, Aug 23, 2005 at 10:43:35PM +0200, Miklos Szeredi wrote:
> 64 bit architectures all implement their own compatibility sys_open(),
> when in fact the difference is simply not forcing the O_LARGEFILE
> flag. So use the a common function instead.
Traditional naming would be just do_open(), but else this looks very nice.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-23 21:44 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Arnd Bergmann
@ 2005-08-24 8:58 ` Miklos Szeredi
0 siblings, 0 replies; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-24 8:58 UTC (permalink / raw)
To: arnd; +Cc: akpm, linux-kernel
> Please don't leave the functions inside of the architecture specific code.
> The code is common enough to be shared, so just put a new compat_sys_open()
> function into fs/compat.c.
OK. Done for x86_64, ia64, ppc64. Sparc64 does magic things with
sparc32_open(), so I left it as it is.
> I'm also not sure wether s390, mips and/or parisc need to use the
> same function instead of the standard sys_open().
I have no idea.
Andrew, could you please apply this one?
Thanks,
Miklos
---
64 bit architectures all implement their own compatibility sys_open(),
when in fact the difference is simply not forcing the O_LARGEFILE
flag. So use the a common function instead.
Signed-off-by: Miklos Szeredi <miklos@szeredi.hu>
Index: linux/include/linux/fs.h
===================================================================
--- linux.orig/include/linux/fs.h 2005-08-23 14:56:06.000000000 +0200
+++ linux/include/linux/fs.h 2005-08-24 10:27:08.000000000 +0200
@@ -1287,6 +1287,7 @@ static inline int break_lease(struct ino
/* fs/open.c */
extern int do_truncate(struct dentry *, loff_t start);
+extern long do_sys_open(const char __user *filename, int flags, int mode);
extern struct file *filp_open(const char *, int, int);
extern struct file * dentry_open(struct dentry *, struct vfsmount *, int);
extern int filp_close(struct file *, fl_owner_t id);
Index: linux/fs/open.c
===================================================================
--- linux.orig/fs/open.c 2005-08-23 14:36:20.000000000 +0200
+++ linux/fs/open.c 2005-08-24 10:30:33.000000000 +0200
@@ -938,16 +938,11 @@ void fastcall fd_install(unsigned int fd
EXPORT_SYMBOL(fd_install);
-asmlinkage long sys_open(const char __user * filename, int flags, int mode)
+long do_sys_open(const char __user *filename, int flags, int mode)
{
- char * tmp;
- int fd;
+ char *tmp = getname(filename);
+ int fd = PTR_ERR(tmp);
- if (force_o_largefile())
- flags |= O_LARGEFILE;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
if (!IS_ERR(tmp)) {
fd = get_unused_fd();
if (fd >= 0) {
@@ -964,6 +959,14 @@ asmlinkage long sys_open(const char __us
}
return fd;
}
+
+asmlinkage long sys_open(const char __user *filename, int flags, int mode)
+{
+ if (force_o_largefile())
+ flags |= O_LARGEFILE;
+
+ return do_sys_open(filename, flags, mode);
+}
EXPORT_SYMBOL_GPL(sys_open);
#ifndef __alpha__
Index: linux/arch/x86_64/ia32/sys_ia32.c
===================================================================
--- linux.orig/arch/x86_64/ia32/sys_ia32.c 2005-08-23 14:36:20.000000000 +0200
+++ linux/arch/x86_64/ia32/sys_ia32.c 2005-08-24 10:29:50.000000000 +0200
@@ -969,32 +969,6 @@ long sys32_kill(int pid, int sig)
return sys_kill(pid, sig);
}
-asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
-{
- char * tmp;
- int fd, error;
-
- /* don't force O_LARGEFILE */
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file *f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f)) {
- put_unused_fd(fd);
- fd = error;
- } else {
- fsnotify_open(f->f_dentry);
- fd_install(fd, f);
- }
- }
- putname(tmp);
- }
- return fd;
-}
-
extern asmlinkage long
sys_timer_create(clockid_t which_clock,
struct sigevent __user *timer_event_spec,
Index: linux/arch/ppc64/kernel/sys_ppc32.c
===================================================================
--- linux.orig/arch/ppc64/kernel/sys_ppc32.c 2005-08-23 14:36:20.000000000 +0200
+++ linux/arch/ppc64/kernel/sys_ppc32.c 2005-08-24 10:34:59.000000000 +0200
@@ -867,37 +867,6 @@ off_t ppc32_lseek(unsigned int fd, u32 o
return sys_lseek(fd, (int)offset, origin);
}
-/*
- * This is just a version for 32-bit applications which does
- * not force O_LARGEFILE on.
- */
-asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
-{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file * f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
-}
-
/* Note: it is necessary to treat bufsiz as an unsigned int,
* with the corresponding cast to a signed int to insure that the
* proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
Index: linux/arch/ia64/ia32/sys_ia32.c
===================================================================
--- linux.orig/arch/ia64/ia32/sys_ia32.c 2005-08-23 14:36:20.000000000 +0200
+++ linux/arch/ia64/ia32/sys_ia32.c 2005-08-24 10:38:19.000000000 +0200
@@ -2359,37 +2359,6 @@ sys32_brk (unsigned int brk)
return ret;
}
-/*
- * Exactly like fs/open.c:sys_open(), except that it doesn't set the O_LARGEFILE flag.
- */
-asmlinkage long
-sys32_open (const char __user * filename, int flags, int mode)
-{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file *f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
-}
-
/* Structure for ia32 emulation on ia64 */
struct epoll_event32
{
Index: linux/arch/sparc64/kernel/sys_sparc32.c
===================================================================
--- linux.orig/arch/sparc64/kernel/sys_sparc32.c 2005-08-23 14:36:20.000000000 +0200
+++ linux/arch/sparc64/kernel/sys_sparc32.c 2005-08-23 14:56:06.000000000 +0200
@@ -1002,29 +1002,7 @@ asmlinkage long sys32_adjtimex(struct ti
asmlinkage long sparc32_open(const char __user *filename,
int flags, int mode)
{
- char * tmp;
- int fd, error;
-
- tmp = getname(filename);
- fd = PTR_ERR(tmp);
- if (!IS_ERR(tmp)) {
- fd = get_unused_fd();
- if (fd >= 0) {
- struct file * f = filp_open(tmp, flags, mode);
- error = PTR_ERR(f);
- if (IS_ERR(f))
- goto out_error;
- fd_install(fd, f);
- }
-out:
- putname(tmp);
- }
- return fd;
-
-out_error:
- put_unused_fd(fd);
- fd = error;
- goto out;
+ return do_sys_open(filename, flags, mode);
}
extern unsigned long do_mremap(unsigned long addr,
Index: linux/arch/x86_64/ia32/ia32entry.S
===================================================================
--- linux.orig/arch/x86_64/ia32/ia32entry.S 2005-08-19 14:14:35.000000000 +0200
+++ linux/arch/x86_64/ia32/ia32entry.S 2005-08-24 10:28:42.000000000 +0200
@@ -298,7 +298,7 @@ ia32_sys_call_table:
.quad stub32_fork
.quad sys_read
.quad sys_write
- .quad sys32_open /* 5 */
+ .quad compat_sys_open /* 5 */
.quad sys_close
.quad sys32_waitpid
.quad sys_creat
Index: linux/arch/ia64/ia32/ia32_entry.S
===================================================================
--- linux.orig/arch/ia64/ia32/ia32_entry.S 2005-06-24 13:21:28.000000000 +0200
+++ linux/arch/ia64/ia32/ia32_entry.S 2005-08-24 10:37:14.000000000 +0200
@@ -215,7 +215,7 @@ ia32_syscall_table:
data8 sys32_fork
data8 sys_read
data8 sys_write
- data8 sys32_open /* 5 */
+ data8 compat_sys_open /* 5 */
data8 sys_close
data8 sys32_waitpid
data8 sys_creat
Index: linux/arch/ppc64/kernel/misc.S
===================================================================
--- linux.orig/arch/ppc64/kernel/misc.S 2005-08-19 14:14:33.000000000 +0200
+++ linux/arch/ppc64/kernel/misc.S 2005-08-24 10:36:11.000000000 +0200
@@ -859,7 +859,7 @@ _GLOBAL(sys_call_table32)
.llong .ppc_fork
.llong .sys_read
.llong .sys_write
- .llong .sys32_open /* 5 */
+ .llong .compat_sys_open /* 5 */
.llong .sys_close
.llong .sys32_waitpid
.llong .sys32_creat
Index: linux/fs/compat.c
===================================================================
--- linux.orig/fs/compat.c 2005-08-24 10:40:44.000000000 +0200
+++ linux/fs/compat.c 2005-08-24 10:56:44.000000000 +0200
@@ -1277,6 +1277,16 @@ out:
}
/*
+ * Exactly like fs/open.c:sys_open(), except that it doesn't set the
+ * O_LARGEFILE flag.
+ */
+asmlinkage long
+compat_sys_open(const char __user *filename, int flags, int mode)
+{
+ return do_sys_open(filename, flags, mode);
+}
+
+/*
* compat_count() counts the number of arguments/envelopes. It is basically
* a copy of count() from fs/exec.c, except that it works with 32 bit argv
* and envp pointers.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-24 7:33 ` Christoph Hellwig
@ 2005-08-24 9:00 ` Miklos Szeredi
2005-08-24 9:05 ` Christoph Hellwig
0 siblings, 1 reply; 17+ messages in thread
From: Miklos Szeredi @ 2005-08-24 9:00 UTC (permalink / raw)
To: hch; +Cc: akpm, linux-kernel
> On Tue, Aug 23, 2005 at 10:43:35PM +0200, Miklos Szeredi wrote:
> > 64 bit architectures all implement their own compatibility sys_open(),
> > when in fact the difference is simply not forcing the O_LARGEFILE
> > flag. So use the a common function instead.
>
> Traditional naming would be just do_open(), but else this looks very nice.
do_open() was my first choice, but it caused a number of clashes.
Miklos
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs
2005-08-24 9:00 ` Miklos Szeredi
@ 2005-08-24 9:05 ` Christoph Hellwig
0 siblings, 0 replies; 17+ messages in thread
From: Christoph Hellwig @ 2005-08-24 9:05 UTC (permalink / raw)
To: Miklos Szeredi; +Cc: hch, akpm, linux-kernel
On Wed, Aug 24, 2005 at 11:00:07AM +0200, Miklos Szeredi wrote:
> > On Tue, Aug 23, 2005 at 10:43:35PM +0200, Miklos Szeredi wrote:
> > > 64 bit architectures all implement their own compatibility sys_open(),
> > > when in fact the difference is simply not forcing the O_LARGEFILE
> > > flag. So use the a common function instead.
> >
> > Traditional naming would be just do_open(), but else this looks very nice.
>
> do_open() was my first choice, but it caused a number of clashes.
ok, let's leave it the way it is..
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2005-08-24 9:05 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-23 20:22 [PATCH 0/8] filesystem related cleanups and fixes Miklos Szeredi
2005-08-23 20:24 ` [PATCH 1/8] remove ia_attr_flags Miklos Szeredi
2005-08-23 20:26 ` [PATCH 2/8] namei cleanup Miklos Szeredi
2005-08-23 20:30 ` [PATCH 3/8] use get_fs_struct() in proc Miklos Szeredi
2005-08-23 20:33 ` [PATCH 4/8] fix enum pid_directory_inos in proc/base.c Miklos Szeredi
2005-08-23 20:36 ` [PATCH 5/8] remove duplicated code from proc and ptrace Miklos Szeredi
2005-08-23 20:43 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Miklos Szeredi
2005-08-23 20:45 ` [PATCH 7/8] cifs_create() fix Miklos Szeredi
2005-08-23 20:47 ` [PATCH 8/8] deprecate open("foo", 3) Miklos Szeredi
2005-08-23 21:44 ` [PATCH 6/8] remove duplicated sys_open32() code from 64bit archs Arnd Bergmann
2005-08-24 8:58 ` Miklos Szeredi
2005-08-24 7:33 ` Christoph Hellwig
2005-08-24 9:00 ` Miklos Szeredi
2005-08-24 9:05 ` Christoph Hellwig
2005-08-23 20:33 ` [PATCH 2/8] namei cleanup Al Viro
2005-08-23 20:50 ` Miklos Szeredi
2005-08-24 7:32 ` [PATCH 1/8] remove ia_attr_flags Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox