Commit c95389b4 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'akpm' (patches from Andrew Morton)

Merge fixes from Andrew Morton:
 "Five fixes.

  err, make that six.  let me try again"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  fs/ocfs2/super.c: Use bigger nodestr to accomodate 32-bit node numbers
  memcg: check that kmem_cache has memcg_params before accessing it
  drivers/base/memory.c: fix show_mem_removable() to handle missing sections
  IPC: bugfix for msgrcv with msgtyp < 0
  Omnikey Cardman 4000: pull in ioctl.h in user header
  timer_list: correct the iterator for timer_list
parents 98474236 49fa8140
...@@ -141,6 +141,8 @@ static ssize_t show_mem_removable(struct device *dev, ...@@ -141,6 +141,8 @@ static ssize_t show_mem_removable(struct device *dev,
container_of(dev, struct memory_block, dev); container_of(dev, struct memory_block, dev);
for (i = 0; i < sections_per_block; i++) { for (i = 0; i < sections_per_block; i++) {
if (!present_section_nr(mem->start_section_nr + i))
continue;
pfn = section_nr_to_pfn(mem->start_section_nr + i); pfn = section_nr_to_pfn(mem->start_section_nr + i);
ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION); ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION);
} }
......
...@@ -1022,7 +1022,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) ...@@ -1022,7 +1022,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
struct inode *inode = NULL; struct inode *inode = NULL;
struct ocfs2_super *osb = NULL; struct ocfs2_super *osb = NULL;
struct buffer_head *bh = NULL; struct buffer_head *bh = NULL;
char nodestr[8]; char nodestr[12];
struct ocfs2_blockcheck_stats stats; struct ocfs2_blockcheck_stats stats;
trace_ocfs2_fill_super(sb, data, silent); trace_ocfs2_fill_super(sb, data, silent);
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#define _UAPI_CM4000_H_ #define _UAPI_CM4000_H_
#include <linux/types.h> #include <linux/types.h>
#include <linux/ioctl.h>
#define MAX_ATR 33 #define MAX_ATR 33
......
...@@ -839,7 +839,7 @@ static inline void free_copy(struct msg_msg *copy) ...@@ -839,7 +839,7 @@ static inline void free_copy(struct msg_msg *copy)
static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode)
{ {
struct msg_msg *msg; struct msg_msg *msg, *found = NULL;
long count = 0; long count = 0;
list_for_each_entry(msg, &msq->q_messages, m_list) { list_for_each_entry(msg, &msq->q_messages, m_list) {
...@@ -848,6 +848,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) ...@@ -848,6 +848,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode)
*msgtyp, mode)) { *msgtyp, mode)) {
if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) { if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) {
*msgtyp = msg->m_type - 1; *msgtyp = msg->m_type - 1;
found = msg;
} else if (mode == SEARCH_NUMBER) { } else if (mode == SEARCH_NUMBER) {
if (*msgtyp == count) if (*msgtyp == count)
return msg; return msg;
...@@ -857,7 +858,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) ...@@ -857,7 +858,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode)
} }
} }
return ERR_PTR(-EAGAIN); return found ?: ERR_PTR(-EAGAIN);
} }
long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg, long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg,
......
...@@ -265,10 +265,9 @@ static inline void timer_list_header(struct seq_file *m, u64 now) ...@@ -265,10 +265,9 @@ static inline void timer_list_header(struct seq_file *m, u64 now)
static int timer_list_show(struct seq_file *m, void *v) static int timer_list_show(struct seq_file *m, void *v)
{ {
struct timer_list_iter *iter = v; struct timer_list_iter *iter = v;
u64 now = ktime_to_ns(ktime_get());
if (iter->cpu == -1 && !iter->second_pass) if (iter->cpu == -1 && !iter->second_pass)
timer_list_header(m, now); timer_list_header(m, iter->now);
else if (!iter->second_pass) else if (!iter->second_pass)
print_cpu(m, iter->cpu, iter->now); print_cpu(m, iter->cpu, iter->now);
#ifdef CONFIG_GENERIC_CLOCKEVENTS #ifdef CONFIG_GENERIC_CLOCKEVENTS
...@@ -298,33 +297,41 @@ void sysrq_timer_list_show(void) ...@@ -298,33 +297,41 @@ void sysrq_timer_list_show(void)
return; return;
} }
static void *timer_list_start(struct seq_file *file, loff_t *offset) static void *move_iter(struct timer_list_iter *iter, loff_t offset)
{ {
struct timer_list_iter *iter = file->private; for (; offset; offset--) {
iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
if (!*offset) { if (iter->cpu >= nr_cpu_ids) {
iter->cpu = -1;
iter->now = ktime_to_ns(ktime_get());
} else if (iter->cpu >= nr_cpu_ids) {
#ifdef CONFIG_GENERIC_CLOCKEVENTS #ifdef CONFIG_GENERIC_CLOCKEVENTS
if (!iter->second_pass) { if (!iter->second_pass) {
iter->cpu = -1; iter->cpu = -1;
iter->second_pass = true; iter->second_pass = true;
} else } else
return NULL; return NULL;
#else #else
return NULL; return NULL;
#endif #endif
}
} }
return iter; return iter;
} }
static void *timer_list_start(struct seq_file *file, loff_t *offset)
{
struct timer_list_iter *iter = file->private;
if (!*offset)
iter->now = ktime_to_ns(ktime_get());
iter->cpu = -1;
iter->second_pass = false;
return move_iter(iter, *offset);
}
static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset) static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset)
{ {
struct timer_list_iter *iter = file->private; struct timer_list_iter *iter = file->private;
iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
++*offset; ++*offset;
return timer_list_start(file, offset); return move_iter(iter, 1);
} }
static void timer_list_stop(struct seq_file *seq, void *v) static void timer_list_stop(struct seq_file *seq, void *v)
......
...@@ -162,6 +162,8 @@ static inline const char *cache_name(struct kmem_cache *s) ...@@ -162,6 +162,8 @@ static inline const char *cache_name(struct kmem_cache *s)
static inline struct kmem_cache *cache_from_memcg(struct kmem_cache *s, int idx) static inline struct kmem_cache *cache_from_memcg(struct kmem_cache *s, int idx)
{ {
if (!s->memcg_params)
return NULL;
return s->memcg_params->memcg_caches[idx]; return s->memcg_params->memcg_caches[idx];
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment