diff options
| -rw-r--r-- | Documentation/DocBook/media/Makefile | 2 | ||||
| -rw-r--r-- | MAINTAINERS | 2 | ||||
| -rw-r--r-- | fs/ocfs2/dlm/dlmmaster.c | 8 | ||||
| -rw-r--r-- | include/linux/sched.h | 2 | ||||
| -rw-r--r-- | mm/filemap.c | 6 | ||||
| -rw-r--r-- | mm/madvise.c | 2 | ||||
| -rw-r--r-- | mm/memcontrol.c | 27 | ||||
| -rw-r--r-- | mm/memory-failure.c | 17 | 
8 files changed, 38 insertions, 28 deletions
diff --git a/Documentation/DocBook/media/Makefile b/Documentation/DocBook/media/Makefile index f9fd615427fb..1d27f0a1abd1 100644 --- a/Documentation/DocBook/media/Makefile +++ b/Documentation/DocBook/media/Makefile @@ -195,7 +195,7 @@ DVB_DOCUMENTED = \  #  install_media_images = \ -	$(Q)cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api +	$(Q)-cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api  $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64  	$(Q)base64 -d $< >$@ diff --git a/MAINTAINERS b/MAINTAINERS index 6846c7c622e3..c47d2683bd6b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -537,7 +537,7 @@ L:	linux-alpha@vger.kernel.org  F:	arch/alpha/  ALTERA TRIPLE SPEED ETHERNET DRIVER -M:	Vince Bridgers <vbridgers2013@gmail.com +M:	Vince Bridgers <vbridgers2013@gmail.com>  L:	netdev@vger.kernel.org  L:	nios2-dev@lists.rocketboards.org (moderated for non-subscribers)  S:	Maintained diff --git a/fs/ocfs2/dlm/dlmmaster.c b/fs/ocfs2/dlm/dlmmaster.c index af3f7aa73e13..ee1f88419cb0 100644 --- a/fs/ocfs2/dlm/dlmmaster.c +++ b/fs/ocfs2/dlm/dlmmaster.c @@ -472,11 +472,15 @@ bail:  void dlm_destroy_master_caches(void)  { -	if (dlm_lockname_cache) +	if (dlm_lockname_cache) {  		kmem_cache_destroy(dlm_lockname_cache); +		dlm_lockname_cache = NULL; +	} -	if (dlm_lockres_cache) +	if (dlm_lockres_cache) {  		kmem_cache_destroy(dlm_lockres_cache); +		dlm_lockres_cache = NULL; +	}  }  static void dlm_lockres_release(struct kref *kref) diff --git a/include/linux/sched.h b/include/linux/sched.h index 25f54c79f757..21fbdae61b9e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -220,7 +220,7 @@ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq);  #define TASK_PARKED		512  #define TASK_STATE_MAX		1024 -#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKWP" +#define TASK_STATE_TO_CHAR_STR "RSDTtXZxKWP"  extern char ___assert_task_state[1 - 2*!!(  		sizeof(TASK_STATE_TO_CHAR_STR)-1 != ilog2(TASK_STATE_MAX)+1)]; diff --git a/mm/filemap.c b/mm/filemap.c index 000a220e2a41..088358c8006b 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -257,9 +257,11 @@ static int filemap_check_errors(struct address_space *mapping)  {  	int ret = 0;  	/* Check for outstanding write errors */ -	if (test_and_clear_bit(AS_ENOSPC, &mapping->flags)) +	if (test_bit(AS_ENOSPC, &mapping->flags) && +	    test_and_clear_bit(AS_ENOSPC, &mapping->flags))  		ret = -ENOSPC; -	if (test_and_clear_bit(AS_EIO, &mapping->flags)) +	if (test_bit(AS_EIO, &mapping->flags) && +	    test_and_clear_bit(AS_EIO, &mapping->flags))  		ret = -EIO;  	return ret;  } diff --git a/mm/madvise.c b/mm/madvise.c index 539eeb96b323..a402f8fdc68e 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -195,7 +195,7 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,  	for (; start < end; start += PAGE_SIZE) {  		index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff; -		page = find_get_page(mapping, index); +		page = find_get_entry(mapping, index);  		if (!radix_tree_exceptional_entry(page)) {  			if (page)  				page_cache_release(page); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c47dffdcb246..5177c6d4a2dd 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1077,9 +1077,18 @@ static struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)  	rcu_read_lock();  	do { -		memcg = mem_cgroup_from_task(rcu_dereference(mm->owner)); -		if (unlikely(!memcg)) +		/* +		 * Page cache insertions can happen withou an +		 * actual mm context, e.g. during disk probing +		 * on boot, loopback IO, acct() writes etc. +		 */ +		if (unlikely(!mm))  			memcg = root_mem_cgroup; +		else { +			memcg = mem_cgroup_from_task(rcu_dereference(mm->owner)); +			if (unlikely(!memcg)) +				memcg = root_mem_cgroup; +		}  	} while (!css_tryget(&memcg->css));  	rcu_read_unlock();  	return memcg; @@ -3958,17 +3967,9 @@ int mem_cgroup_charge_file(struct page *page, struct mm_struct *mm,  		return 0;  	} -	/* -	 * Page cache insertions can happen without an actual mm -	 * context, e.g. during disk probing on boot. -	 */ -	if (unlikely(!mm)) -		memcg = root_mem_cgroup; -	else { -		memcg = mem_cgroup_try_charge_mm(mm, gfp_mask, 1, true); -		if (!memcg) -			return -ENOMEM; -	} +	memcg = mem_cgroup_try_charge_mm(mm, gfp_mask, 1, true); +	if (!memcg) +		return -ENOMEM;  	__mem_cgroup_commit_charge(memcg, page, 1, type, false);  	return 0;  } diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 35ef28acf137..9ccef39a9de2 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1081,15 +1081,16 @@ int memory_failure(unsigned long pfn, int trapno, int flags)  			return 0;  		} else if (PageHuge(hpage)) {  			/* -			 * Check "just unpoisoned", "filter hit", and -			 * "race with other subpage." +			 * Check "filter hit" and "race with other subpage."  			 */  			lock_page(hpage); -			if (!PageHWPoison(hpage) -			    || (hwpoison_filter(p) && TestClearPageHWPoison(p)) -			    || (p != hpage && TestSetPageHWPoison(hpage))) { -				atomic_long_sub(nr_pages, &num_poisoned_pages); -				return 0; +			if (PageHWPoison(hpage)) { +				if ((hwpoison_filter(p) && TestClearPageHWPoison(p)) +				    || (p != hpage && TestSetPageHWPoison(hpage))) { +					atomic_long_sub(nr_pages, &num_poisoned_pages); +					unlock_page(hpage); +					return 0; +				}  			}  			set_page_hwpoison_huge_page(hpage);  			res = dequeue_hwpoisoned_huge_page(hpage); @@ -1152,6 +1153,8 @@ int memory_failure(unsigned long pfn, int trapno, int flags)  	 */  	if (!PageHWPoison(p)) {  		printk(KERN_ERR "MCE %#lx: just unpoisoned\n", pfn); +		atomic_long_sub(nr_pages, &num_poisoned_pages); +		put_page(hpage);  		res = 0;  		goto out;  	}  | 
