diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/backing-dev.c | 50 | ||||
| -rw-r--r-- | mm/page-writeback.c | 14 | ||||
| -rw-r--r-- | mm/shmem.c | 6 | ||||
| -rw-r--r-- | mm/slab_common.c | 5 | ||||
| -rw-r--r-- | mm/swapfile.c | 11 | 
5 files changed, 50 insertions, 36 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index b41823cc05e..d3ca2b3ee17 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -158,16 +158,16 @@ static ssize_t read_ahead_kb_store(struct device *dev,  				  const char *buf, size_t count)  {  	struct backing_dev_info *bdi = dev_get_drvdata(dev); -	char *end;  	unsigned long read_ahead_kb; -	ssize_t ret = -EINVAL; +	ssize_t ret; -	read_ahead_kb = simple_strtoul(buf, &end, 10); -	if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { -		bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); -		ret = count; -	} -	return ret; +	ret = kstrtoul(buf, 10, &read_ahead_kb); +	if (ret < 0) +		return ret; + +	bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); + +	return count;  }  #define K(pages) ((pages) << (PAGE_SHIFT - 10)) @@ -187,16 +187,17 @@ static ssize_t min_ratio_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  {  	struct backing_dev_info *bdi = dev_get_drvdata(dev); -	char *end;  	unsigned int ratio; -	ssize_t ret = -EINVAL; +	ssize_t ret; + +	ret = kstrtouint(buf, 10, &ratio); +	if (ret < 0) +		return ret; + +	ret = bdi_set_min_ratio(bdi, ratio); +	if (!ret) +		ret = count; -	ratio = simple_strtoul(buf, &end, 10); -	if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { -		ret = bdi_set_min_ratio(bdi, ratio); -		if (!ret) -			ret = count; -	}  	return ret;  }  BDI_SHOW(min_ratio, bdi->min_ratio) @@ -205,16 +206,17 @@ static ssize_t max_ratio_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  {  	struct backing_dev_info *bdi = dev_get_drvdata(dev); -	char *end;  	unsigned int ratio; -	ssize_t ret = -EINVAL; +	ssize_t ret; + +	ret = kstrtouint(buf, 10, &ratio); +	if (ret < 0) +		return ret; + +	ret = bdi_set_max_ratio(bdi, ratio); +	if (!ret) +		ret = count; -	ratio = simple_strtoul(buf, &end, 10); -	if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { -		ret = bdi_set_max_ratio(bdi, ratio); -		if (!ret) -			ret = count; -	}  	return ret;  }  BDI_SHOW(max_ratio, bdi->max_ratio) diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 5ad5ce23c1e..830893b2b3c 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -1602,10 +1602,18 @@ void writeback_set_ratelimit(void)  }  static int __cpuinit -ratelimit_handler(struct notifier_block *self, unsigned long u, void *v) +ratelimit_handler(struct notifier_block *self, unsigned long action, +		  void *hcpu)  { -	writeback_set_ratelimit(); -	return NOTIFY_DONE; + +	switch (action & ~CPU_TASKS_FROZEN) { +	case CPU_ONLINE: +	case CPU_DEAD: +		writeback_set_ratelimit(); +		return NOTIFY_OK; +	default: +		return NOTIFY_DONE; +	}  }  static struct notifier_block __cpuinitdata ratelimit_nb = { diff --git a/mm/shmem.c b/mm/shmem.c index cc12072f878..67afba5117f 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2220,12 +2220,14 @@ static struct dentry *shmem_fh_to_dentry(struct super_block *sb,  {  	struct inode *inode;  	struct dentry *dentry = NULL; -	u64 inum = fid->raw[2]; -	inum = (inum << 32) | fid->raw[1]; +	u64 inum;  	if (fh_len < 3)  		return NULL; +	inum = fid->raw[2]; +	inum = (inum << 32) | fid->raw[1]; +  	inode = ilookup5(sb, (unsigned long)(inum + fid->raw[0]),  			shmem_match, fid->raw);  	if (inode) { diff --git a/mm/slab_common.c b/mm/slab_common.c index 9c217255ac4..069a24e6440 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -168,6 +168,7 @@ void kmem_cache_destroy(struct kmem_cache *s)  		list_del(&s->list);  		if (!__kmem_cache_shutdown(s)) { +			mutex_unlock(&slab_mutex);  			if (s->flags & SLAB_DESTROY_BY_RCU)  				rcu_barrier(); @@ -175,12 +176,14 @@ void kmem_cache_destroy(struct kmem_cache *s)  			kmem_cache_free(kmem_cache, s);  		} else {  			list_add(&s->list, &slab_caches); +			mutex_unlock(&slab_mutex);  			printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n",  				s->name);  			dump_stack();  		} +	} else { +		mutex_unlock(&slab_mutex);  	} -	mutex_unlock(&slab_mutex);  	put_online_cpus();  }  EXPORT_SYMBOL(kmem_cache_destroy); diff --git a/mm/swapfile.c b/mm/swapfile.c index 14e254c768f..71cd288b200 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1483,7 +1483,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)  	struct file *swap_file, *victim;  	struct address_space *mapping;  	struct inode *inode; -	char *pathname; +	struct filename *pathname;  	int oom_score_adj;  	int i, type, prev;  	int err; @@ -1498,8 +1498,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)  	if (IS_ERR(pathname))  		goto out; -	victim = filp_open(pathname, O_RDWR|O_LARGEFILE, 0); -	putname(pathname); +	victim = file_open_name(pathname, O_RDWR|O_LARGEFILE, 0);  	err = PTR_ERR(victim);  	if (IS_ERR(victim))  		goto out; @@ -1936,7 +1935,7 @@ static int setup_swap_map_and_extents(struct swap_info_struct *p,  SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)  {  	struct swap_info_struct *p; -	char *name; +	struct filename *name;  	struct file *swap_file = NULL;  	struct address_space *mapping;  	int i; @@ -1967,7 +1966,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)  		name = NULL;  		goto bad_swap;  	} -	swap_file = filp_open(name, O_RDWR|O_LARGEFILE, 0); +	swap_file = file_open_name(name, O_RDWR|O_LARGEFILE, 0);  	if (IS_ERR(swap_file)) {  		error = PTR_ERR(swap_file);  		swap_file = NULL; @@ -2053,7 +2052,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)  	printk(KERN_INFO "Adding %uk swap on %s.  "  			"Priority:%d extents:%d across:%lluk %s%s%s\n", -		p->pages<<(PAGE_SHIFT-10), name, p->prio, +		p->pages<<(PAGE_SHIFT-10), name->name, p->prio,  		nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10),  		(p->flags & SWP_SOLIDSTATE) ? "SS" : "",  		(p->flags & SWP_DISCARDABLE) ? "D" : "",  |