ipc: rename ids->rw_mutex
Since in some situations the lock can be shared for readers, we shouldn't be calling it a mutex, rename it to rwsem. Signed-off-by: Davidlohr Bueso <davidlohr.bueso@hp.com> Tested-by: Sedat Dilek <sedat.dilek@gmail.com> Cc: Rik van Riel <riel@redhat.com> Cc: Manfred Spraul <manfred@colorfullife.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c2c737a046
commit
d9a605e40b
24
ipc/sem.c
24
ipc/sem.c
@ -322,7 +322,7 @@ static inline void sem_unlock(struct sem_array *sma, int locknum)
|
||||
}
|
||||
|
||||
/*
|
||||
* sem_lock_(check_) routines are called in the paths where the rw_mutex
|
||||
* sem_lock_(check_) routines are called in the paths where the rwsem
|
||||
* is not held.
|
||||
*
|
||||
* The caller holds the RCU read lock.
|
||||
@ -426,7 +426,7 @@ static inline void sem_rmid(struct ipc_namespace *ns, struct sem_array *s)
|
||||
* @ns: namespace
|
||||
* @params: ptr to the structure that contains key, semflg and nsems
|
||||
*
|
||||
* Called with sem_ids.rw_mutex held (as a writer)
|
||||
* Called with sem_ids.rwsem held (as a writer)
|
||||
*/
|
||||
|
||||
static int newary(struct ipc_namespace *ns, struct ipc_params *params)
|
||||
@ -492,7 +492,7 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
|
||||
|
||||
|
||||
/*
|
||||
* Called with sem_ids.rw_mutex and ipcp locked.
|
||||
* Called with sem_ids.rwsem and ipcp locked.
|
||||
*/
|
||||
static inline int sem_security(struct kern_ipc_perm *ipcp, int semflg)
|
||||
{
|
||||
@ -503,7 +503,7 @@ static inline int sem_security(struct kern_ipc_perm *ipcp, int semflg)
|
||||
}
|
||||
|
||||
/*
|
||||
* Called with sem_ids.rw_mutex and ipcp locked.
|
||||
* Called with sem_ids.rwsem and ipcp locked.
|
||||
*/
|
||||
static inline int sem_more_checks(struct kern_ipc_perm *ipcp,
|
||||
struct ipc_params *params)
|
||||
@ -994,8 +994,8 @@ static int count_semzcnt (struct sem_array * sma, ushort semnum)
|
||||
return semzcnt;
|
||||
}
|
||||
|
||||
/* Free a semaphore set. freeary() is called with sem_ids.rw_mutex locked
|
||||
* as a writer and the spinlock for this semaphore set hold. sem_ids.rw_mutex
|
||||
/* Free a semaphore set. freeary() is called with sem_ids.rwsem locked
|
||||
* as a writer and the spinlock for this semaphore set hold. sem_ids.rwsem
|
||||
* remains locked on exit.
|
||||
*/
|
||||
static void freeary(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp)
|
||||
@ -1116,7 +1116,7 @@ static int semctl_nolock(struct ipc_namespace *ns, int semid,
|
||||
seminfo.semmnu = SEMMNU;
|
||||
seminfo.semmap = SEMMAP;
|
||||
seminfo.semume = SEMUME;
|
||||
down_read(&sem_ids(ns).rw_mutex);
|
||||
down_read(&sem_ids(ns).rwsem);
|
||||
if (cmd == SEM_INFO) {
|
||||
seminfo.semusz = sem_ids(ns).in_use;
|
||||
seminfo.semaem = ns->used_sems;
|
||||
@ -1125,7 +1125,7 @@ static int semctl_nolock(struct ipc_namespace *ns, int semid,
|
||||
seminfo.semaem = SEMAEM;
|
||||
}
|
||||
max_id = ipc_get_maxid(&sem_ids(ns));
|
||||
up_read(&sem_ids(ns).rw_mutex);
|
||||
up_read(&sem_ids(ns).rwsem);
|
||||
if (copy_to_user(p, &seminfo, sizeof(struct seminfo)))
|
||||
return -EFAULT;
|
||||
return (max_id < 0) ? 0: max_id;
|
||||
@ -1431,9 +1431,9 @@ copy_semid_from_user(struct semid64_ds *out, void __user *buf, int version)
|
||||
}
|
||||
|
||||
/*
|
||||
* This function handles some semctl commands which require the rw_mutex
|
||||
* This function handles some semctl commands which require the rwsem
|
||||
* to be held in write mode.
|
||||
* NOTE: no locks must be held, the rw_mutex is taken inside this function.
|
||||
* NOTE: no locks must be held, the rwsem is taken inside this function.
|
||||
*/
|
||||
static int semctl_down(struct ipc_namespace *ns, int semid,
|
||||
int cmd, int version, void __user *p)
|
||||
@ -1448,7 +1448,7 @@ static int semctl_down(struct ipc_namespace *ns, int semid,
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
down_write(&sem_ids(ns).rw_mutex);
|
||||
down_write(&sem_ids(ns).rwsem);
|
||||
rcu_read_lock();
|
||||
|
||||
ipcp = ipcctl_pre_down_nolock(ns, &sem_ids(ns), semid, cmd,
|
||||
@ -1487,7 +1487,7 @@ out_unlock0:
|
||||
out_unlock1:
|
||||
rcu_read_unlock();
|
||||
out_up:
|
||||
up_write(&sem_ids(ns).rw_mutex);
|
||||
up_write(&sem_ids(ns).rwsem);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user