forked from Minki/linux
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
This commit is contained in:
commit
c95389b4cd
@ -141,6 +141,8 @@ static ssize_t show_mem_removable(struct device *dev,
|
||||
container_of(dev, struct memory_block, dev);
|
||||
|
||||
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);
|
||||
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)
|
||||
struct inode *inode = NULL;
|
||||
struct ocfs2_super *osb = NULL;
|
||||
struct buffer_head *bh = NULL;
|
||||
char nodestr[8];
|
||||
char nodestr[12];
|
||||
struct ocfs2_blockcheck_stats stats;
|
||||
|
||||
trace_ocfs2_fill_super(sb, data, silent);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define _UAPI_CM4000_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#define MAX_ATR 33
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
struct msg_msg *msg;
|
||||
struct msg_msg *msg, *found = NULL;
|
||||
long count = 0;
|
||||
|
||||
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)
|
||||
*msgtyp, mode)) {
|
||||
if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) {
|
||||
*msgtyp = msg->m_type - 1;
|
||||
found = msg;
|
||||
} else if (mode == SEARCH_NUMBER) {
|
||||
if (*msgtyp == count)
|
||||
return msg;
|
||||
@ -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,
|
||||
|
@ -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)
|
||||
{
|
||||
struct timer_list_iter *iter = v;
|
||||
u64 now = ktime_to_ns(ktime_get());
|
||||
|
||||
if (iter->cpu == -1 && !iter->second_pass)
|
||||
timer_list_header(m, now);
|
||||
timer_list_header(m, iter->now);
|
||||
else if (!iter->second_pass)
|
||||
print_cpu(m, iter->cpu, iter->now);
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
@ -298,33 +297,41 @@ void sysrq_timer_list_show(void)
|
||||
return;
|
||||
}
|
||||
|
||||
static void *move_iter(struct timer_list_iter *iter, loff_t offset)
|
||||
{
|
||||
for (; offset; offset--) {
|
||||
iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
|
||||
if (iter->cpu >= nr_cpu_ids) {
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
if (!iter->second_pass) {
|
||||
iter->cpu = -1;
|
||||
iter->second_pass = true;
|
||||
} else
|
||||
return NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return iter;
|
||||
}
|
||||
|
||||
static void *timer_list_start(struct seq_file *file, loff_t *offset)
|
||||
{
|
||||
struct timer_list_iter *iter = file->private;
|
||||
|
||||
if (!*offset) {
|
||||
iter->cpu = -1;
|
||||
if (!*offset)
|
||||
iter->now = ktime_to_ns(ktime_get());
|
||||
} else if (iter->cpu >= nr_cpu_ids) {
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
if (!iter->second_pass) {
|
||||
iter->cpu = -1;
|
||||
iter->second_pass = true;
|
||||
} else
|
||||
return NULL;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
return iter;
|
||||
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)
|
||||
{
|
||||
struct timer_list_iter *iter = file->private;
|
||||
iter->cpu = cpumask_next(iter->cpu, cpu_online_mask);
|
||||
++*offset;
|
||||
return timer_list_start(file, offset);
|
||||
return move_iter(iter, 1);
|
||||
}
|
||||
|
||||
static void timer_list_stop(struct seq_file *seq, void *v)
|
||||
|
Loading…
Reference in New Issue
Block a user