diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/netfilter/nf_log.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c index c93494fef8ef..d65d3481919c 100644 --- a/net/netfilter/nf_log.c +++ b/net/netfilter/nf_log.c | |||
| @@ -128,9 +128,8 @@ EXPORT_SYMBOL(nf_log_packet); | |||
| 128 | 128 | ||
| 129 | #ifdef CONFIG_PROC_FS | 129 | #ifdef CONFIG_PROC_FS |
| 130 | static void *seq_start(struct seq_file *seq, loff_t *pos) | 130 | static void *seq_start(struct seq_file *seq, loff_t *pos) |
| 131 | __acquires(RCU) | ||
| 132 | { | 131 | { |
| 133 | rcu_read_lock(); | 132 | mutex_lock(&nf_log_mutex); |
| 134 | 133 | ||
| 135 | if (*pos >= ARRAY_SIZE(nf_loggers)) | 134 | if (*pos >= ARRAY_SIZE(nf_loggers)) |
| 136 | return NULL; | 135 | return NULL; |
| @@ -149,9 +148,8 @@ static void *seq_next(struct seq_file *s, void *v, loff_t *pos) | |||
| 149 | } | 148 | } |
| 150 | 149 | ||
| 151 | static void seq_stop(struct seq_file *s, void *v) | 150 | static void seq_stop(struct seq_file *s, void *v) |
| 152 | __releases(RCU) | ||
| 153 | { | 151 | { |
| 154 | rcu_read_unlock(); | 152 | mutex_unlock(&nf_log_mutex); |
| 155 | } | 153 | } |
| 156 | 154 | ||
| 157 | static int seq_show(struct seq_file *s, void *v) | 155 | static int seq_show(struct seq_file *s, void *v) |
| @@ -161,7 +159,7 @@ static int seq_show(struct seq_file *s, void *v) | |||
| 161 | struct nf_logger *t; | 159 | struct nf_logger *t; |
| 162 | int ret; | 160 | int ret; |
| 163 | 161 | ||
| 164 | logger = rcu_dereference(nf_loggers[*pos]); | 162 | logger = nf_loggers[*pos]; |
| 165 | 163 | ||
| 166 | if (!logger) | 164 | if (!logger) |
| 167 | ret = seq_printf(s, "%2lld NONE (", *pos); | 165 | ret = seq_printf(s, "%2lld NONE (", *pos); |
| @@ -171,22 +169,16 @@ static int seq_show(struct seq_file *s, void *v) | |||
| 171 | if (ret < 0) | 169 | if (ret < 0) |
| 172 | return ret; | 170 | return ret; |
| 173 | 171 | ||
| 174 | mutex_lock(&nf_log_mutex); | ||
| 175 | list_for_each_entry(t, &nf_loggers_l[*pos], list[*pos]) { | 172 | list_for_each_entry(t, &nf_loggers_l[*pos], list[*pos]) { |
| 176 | ret = seq_printf(s, "%s", t->name); | 173 | ret = seq_printf(s, "%s", t->name); |
| 177 | if (ret < 0) { | 174 | if (ret < 0) |
| 178 | mutex_unlock(&nf_log_mutex); | ||
| 179 | return ret; | 175 | return ret; |
| 180 | } | ||
| 181 | if (&t->list[*pos] != nf_loggers_l[*pos].prev) { | 176 | if (&t->list[*pos] != nf_loggers_l[*pos].prev) { |
| 182 | ret = seq_printf(s, ","); | 177 | ret = seq_printf(s, ","); |
| 183 | if (ret < 0) { | 178 | if (ret < 0) |
| 184 | mutex_unlock(&nf_log_mutex); | ||
| 185 | return ret; | 179 | return ret; |
| 186 | } | ||
| 187 | } | 180 | } |
| 188 | } | 181 | } |
| 189 | mutex_unlock(&nf_log_mutex); | ||
| 190 | 182 | ||
| 191 | return seq_printf(s, ")\n"); | 183 | return seq_printf(s, ")\n"); |
| 192 | } | 184 | } |
