mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 23:10:58 +00:00
linux-hold-tasklist-lock-in-get-page-offset-20030321
tasklist_lock must be held to traverse list
This commit is contained in:
parent
7f4d43ac2f
commit
38cec12f2c
@ -25,9 +25,9 @@ RCSID("$Header$");
|
||||
#include <linux/slab.h>
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#endif
|
||||
#ifndef EXPORTED_SYS_CALL_TABLE
|
||||
#include <linux/sched.h>
|
||||
#include <linux/syscall.h>
|
||||
#endif
|
||||
|
||||
@ -440,14 +440,26 @@ static long get_page_offset(void)
|
||||
struct task_struct *p, *q;
|
||||
|
||||
/* search backward thru the circular list */
|
||||
#ifdef DEFINED_PREV_TASK
|
||||
for(q = current; p = q; q = prev_task(p))
|
||||
#else
|
||||
for(p = current; p; p = p->prev_task)
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
|
||||
read_lock(&tasklist_lock);
|
||||
#endif
|
||||
if (p->pid == 1)
|
||||
return p->addr_limit.seg;
|
||||
|
||||
return 0;
|
||||
/* search backward thru the circular list */
|
||||
#ifdef DEFINED_PREV_TASK
|
||||
for(q = current; p = q; q = prev_task(p)) {
|
||||
#else
|
||||
for(p = current; p; p = p->prev_task) {
|
||||
#endif
|
||||
if (p->pid == 1) {
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
|
||||
read_unlock(&tasklist_lock);
|
||||
#endif
|
||||
return p->addr_limit.seg;
|
||||
}
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)
|
||||
read_unlock(&tasklist_lock);
|
||||
#endif
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user