}
if (proc) {
- write_lock(&proc->filter_lock);
+ mutex_lock(&proc->filters.mtx);
if (sspt_proc_is_filter_new(proc, pfg)) {
img_proc_copy_to_sspt(pfg->i_proc, proc);
sspt_proc_add_filter(proc, pfg);
pfg_add_proc(pfg, proc);
flag = flag == PIF_FIRST ? flag : PIF_ADD_PFG;
}
- write_unlock(&proc->filter_lock);
+ mutex_unlock(&proc->filters.mtx);
}
}
pfg_list_runlock();
proc->task = task->group_leader;
proc->sm = create_sm_us(task);
INIT_LIST_HEAD(&proc->file_head);
- rwlock_init(&proc->filter_lock);
- INIT_LIST_HEAD(&proc->filter_list);
+ mutex_init(&proc->filters.mtx);
+ INIT_LIST_HEAD(&proc->filters.head);
atomic_set(&proc->usage, 1);
get_task_struct(proc->task);
f = sspt_filter_create(proc, pfg);
if (f)
- list_add(&f->list, &proc->filter_list);
+ list_add(&f->list, &proc->filters.head);
}
/**
{
struct sspt_filter *fl, *tmp;
- write_lock(&proc->filter_lock);
- list_for_each_entry_safe(fl, tmp, &proc->filter_list, list) {
+ mutex_lock(&proc->filters.mtx);
+ list_for_each_entry_safe(fl, tmp, &proc->filters.head, list) {
if (fl->pfg == pfg) {
list_del(&fl->list);
sspt_filter_free(fl);
}
}
- write_unlock(&proc->filter_lock);
+ mutex_unlock(&proc->filters.mtx);
}
/**
{
struct sspt_filter *fl, *tmp;
- write_lock(&proc->filter_lock);
- list_for_each_entry_safe(fl, tmp, &proc->filter_list, list) {
+ mutex_lock(&proc->filters.mtx);
+ list_for_each_entry_safe(fl, tmp, &proc->filters.head, list) {
list_del(&fl->list);
sspt_filter_free(fl);
}
- write_unlock(&proc->filter_lock);
+ mutex_unlock(&proc->filters.mtx);
}
/**
{
struct sspt_filter *fl;
- list_for_each_entry(fl, &proc->filter_list, list)
+ list_for_each_entry(fl, &proc->filters.head, list)
if (fl->pfg == pfg)
return false;
{
struct sspt_filter *fl;
- list_for_each_entry(fl, &proc->filter_list, list)
+ list_for_each_entry(fl, &proc->filters.head, list)
func(fl, data);
}
*/
#include <linux/types.h>
+#include <linux/mutex.h>
#include "sspt_file.h"
struct slot_manager;
struct task_struct *__task;
struct slot_manager *sm; /**< Ptr to the manager slot */
- rwlock_t filter_lock;
- struct list_head filter_list; /**< Filter list */
+ struct {
+ struct mutex mtx; /**< Mutex for filter list */
+ struct list_head head; /**< Filter head */
+ } filters;
unsigned first_install:1; /**< Install flag */
struct sspt_feature *feature; /**< Ptr to the feature */