提交 b33291c0 编写于 作者: A Andrew Morton 提交者: Linus Torvalds

[PATCH] ipc: expand shm_flags

Unobfsucate this struct member

Cc: Manfred Spraul <manfred@colorfullife.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 b3f3d614
...@@ -34,8 +34,6 @@ ...@@ -34,8 +34,6 @@
#include "util.h" #include "util.h"
#define shm_flags shm_perm.mode
static struct file_operations shm_file_operations; static struct file_operations shm_file_operations;
static struct vm_operations_struct shm_vm_ops; static struct vm_operations_struct shm_vm_ops;
...@@ -148,7 +146,7 @@ static void shm_close (struct vm_area_struct *shmd) ...@@ -148,7 +146,7 @@ static void shm_close (struct vm_area_struct *shmd)
shp->shm_dtim = get_seconds(); shp->shm_dtim = get_seconds();
shp->shm_nattch--; shp->shm_nattch--;
if(shp->shm_nattch == 0 && if(shp->shm_nattch == 0 &&
shp->shm_flags & SHM_DEST) shp->shm_perm.mode & SHM_DEST)
shm_destroy (shp); shm_destroy (shp);
else else
shm_unlock(shp); shm_unlock(shp);
...@@ -205,7 +203,7 @@ static int newseg (key_t key, int shmflg, size_t size) ...@@ -205,7 +203,7 @@ static int newseg (key_t key, int shmflg, size_t size)
return -ENOMEM; return -ENOMEM;
shp->shm_perm.key = key; shp->shm_perm.key = key;
shp->shm_flags = (shmflg & S_IRWXUGO); shp->shm_perm.mode = (shmflg & S_IRWXUGO);
shp->mlock_user = NULL; shp->mlock_user = NULL;
shp->shm_perm.security = NULL; shp->shm_perm.security = NULL;
...@@ -345,7 +343,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __ ...@@ -345,7 +343,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __
out->uid = tbuf.shm_perm.uid; out->uid = tbuf.shm_perm.uid;
out->gid = tbuf.shm_perm.gid; out->gid = tbuf.shm_perm.gid;
out->mode = tbuf.shm_flags; out->mode = tbuf.shm_perm.mode;
return 0; return 0;
} }
...@@ -358,7 +356,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __ ...@@ -358,7 +356,7 @@ static inline unsigned long copy_shmid_from_user(struct shm_setbuf *out, void __
out->uid = tbuf_old.shm_perm.uid; out->uid = tbuf_old.shm_perm.uid;
out->gid = tbuf_old.shm_perm.gid; out->gid = tbuf_old.shm_perm.gid;
out->mode = tbuf_old.shm_flags; out->mode = tbuf_old.shm_perm.mode;
return 0; return 0;
} }
...@@ -560,13 +558,13 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf) ...@@ -560,13 +558,13 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
if (!is_file_hugepages(shp->shm_file)) { if (!is_file_hugepages(shp->shm_file)) {
err = shmem_lock(shp->shm_file, 1, user); err = shmem_lock(shp->shm_file, 1, user);
if (!err) { if (!err) {
shp->shm_flags |= SHM_LOCKED; shp->shm_perm.mode |= SHM_LOCKED;
shp->mlock_user = user; shp->mlock_user = user;
} }
} }
} else if (!is_file_hugepages(shp->shm_file)) { } else if (!is_file_hugepages(shp->shm_file)) {
shmem_lock(shp->shm_file, 0, shp->mlock_user); shmem_lock(shp->shm_file, 0, shp->mlock_user);
shp->shm_flags &= ~SHM_LOCKED; shp->shm_perm.mode &= ~SHM_LOCKED;
shp->mlock_user = NULL; shp->mlock_user = NULL;
} }
shm_unlock(shp); shm_unlock(shp);
...@@ -605,7 +603,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf) ...@@ -605,7 +603,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
goto out_unlock_up; goto out_unlock_up;
if (shp->shm_nattch){ if (shp->shm_nattch){
shp->shm_flags |= SHM_DEST; shp->shm_perm.mode |= SHM_DEST;
/* Do not find it any more */ /* Do not find it any more */
shp->shm_perm.key = IPC_PRIVATE; shp->shm_perm.key = IPC_PRIVATE;
shm_unlock(shp); shm_unlock(shp);
...@@ -644,7 +642,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf) ...@@ -644,7 +642,7 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
shp->shm_perm.uid = setbuf.uid; shp->shm_perm.uid = setbuf.uid;
shp->shm_perm.gid = setbuf.gid; shp->shm_perm.gid = setbuf.gid;
shp->shm_flags = (shp->shm_flags & ~S_IRWXUGO) shp->shm_perm.mode = (shp->shm_perm.mode & ~S_IRWXUGO)
| (setbuf.mode & S_IRWXUGO); | (setbuf.mode & S_IRWXUGO);
shp->shm_ctim = get_seconds(); shp->shm_ctim = get_seconds();
break; break;
...@@ -777,7 +775,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr) ...@@ -777,7 +775,7 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
BUG(); BUG();
shp->shm_nattch--; shp->shm_nattch--;
if(shp->shm_nattch == 0 && if(shp->shm_nattch == 0 &&
shp->shm_flags & SHM_DEST) shp->shm_perm.mode & SHM_DEST)
shm_destroy (shp); shm_destroy (shp);
else else
shm_unlock(shp); shm_unlock(shp);
...@@ -902,7 +900,7 @@ static int sysvipc_shm_proc_show(struct seq_file *s, void *it) ...@@ -902,7 +900,7 @@ static int sysvipc_shm_proc_show(struct seq_file *s, void *it)
return seq_printf(s, format, return seq_printf(s, format,
shp->shm_perm.key, shp->shm_perm.key,
shp->id, shp->id,
shp->shm_flags, shp->shm_perm.mode,
shp->shm_segsz, shp->shm_segsz,
shp->shm_cprid, shp->shm_cprid,
shp->shm_lprid, shp->shm_lprid,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册