aboutsummaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
Diffstat (limited to 'ipc')
-rw-r--r--ipc/sem.c2
-rw-r--r--ipc/shm.c18
2 files changed, 15 insertions, 5 deletions
diff --git a/ipc/sem.c b/ipc/sem.c
index 19af028a3e38..cb5bb2a5df96 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -381,6 +381,7 @@ static void update_queue (struct sem_array * sma)
381 /* hands-off: q will disappear immediately after 381 /* hands-off: q will disappear immediately after
382 * writing q->status. 382 * writing q->status.
383 */ 383 */
384 smp_wmb();
384 q->status = error; 385 q->status = error;
385 q = n; 386 q = n;
386 } else { 387 } else {
@@ -461,6 +462,7 @@ static void freeary (struct sem_array *sma, int id)
461 n = q->next; 462 n = q->next;
462 q->status = IN_WAKEUP; 463 q->status = IN_WAKEUP;
463 wake_up_process(q->sleeper); /* doesn't sleep */ 464 wake_up_process(q->sleeper); /* doesn't sleep */
465 smp_wmb();
464 q->status = -EIDRM; /* hands-off q */ 466 q->status = -EIDRM; /* hands-off q */
465 q = n; 467 q = n;
466 } 468 }
diff --git a/ipc/shm.c b/ipc/shm.c
index 587d836d80d9..0ef4a1cf3e27 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -157,14 +157,22 @@ static void shm_close (struct vm_area_struct *shmd)
157 157
158static int shm_mmap(struct file * file, struct vm_area_struct * vma) 158static int shm_mmap(struct file * file, struct vm_area_struct * vma)
159{ 159{
160 file_accessed(file); 160 int ret;
161 vma->vm_ops = &shm_vm_ops; 161
162 shm_inc(file->f_dentry->d_inode->i_ino); 162 ret = shmem_mmap(file, vma);
163 return 0; 163 if (ret == 0) {
164 vma->vm_ops = &shm_vm_ops;
165 shm_inc(file->f_dentry->d_inode->i_ino);
166 }
167
168 return ret;
164} 169}
165 170
166static struct file_operations shm_file_operations = { 171static struct file_operations shm_file_operations = {
167 .mmap = shm_mmap 172 .mmap = shm_mmap,
173#ifndef CONFIG_MMU
174 .get_unmapped_area = shmem_get_unmapped_area,
175#endif
168}; 176};
169 177
170static struct vm_operations_struct shm_vm_ops = { 178static struct vm_operations_struct shm_vm_ops = {