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);
|
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)
|
||||||
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 @@
|
||||||
#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)
|
||||||
|
|
||||||
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)
|
||||||
*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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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,14 +297,11 @@ 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;
|
||||||
|
@ -316,15 +312,26 @@ static void *timer_list_start(struct seq_file *file, loff_t *offset)
|
||||||
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)
|
||||||
|
|
||||||
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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue