All of lore.kernel.org
 help / color / mirror / Atom feed
From: Minchan Kim <minchan@kernel.org>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] vmalloc: add warning in __vmalloc
Date: Thu, 03 May 2012 10:02:52 +0900	[thread overview]
Message-ID: <4FA1D93C.9000306@kernel.org> (raw)
In-Reply-To: <20120502124610.175e099c.akpm@linux-foundation.org>

On 05/03/2012 04:46 AM, Andrew Morton wrote:

> On Wed,  2 May 2012 13:28:09 +0900
> Minchan Kim <minchan@kernel.org> wrote:
> 
>> Now there are several places to use __vmalloc with GFP_ATOMIC,
>> GFP_NOIO, GFP_NOFS but unfortunately __vmalloc calls map_vm_area
>> which calls alloc_pages with GFP_KERNEL to allocate page tables.
>> It means it's possible to happen deadlock.
>> I don't know why it doesn't have reported until now.
>>
>> Firstly, I tried passing gfp_t to lower functions to support __vmalloc
>> with such flags but other mm guys don't want and decided that
>> all of caller should be fixed.
>>
>> http://marc.info/?l=linux-kernel&m=133517143616544&w=2
>>
>> To begin with, let's listen other's opinion whether they can fix it
>> by other approach without calling __vmalloc with such flags.
>>
>> So this patch adds warning in __vmalloc_node_range to detect it and
>> to be fixed hopely. __vmalloc_node_range isn't random chocie because
>> all caller which has gfp_mask of map_vm_area use it through __vmalloc_area_node.
>> And __vmalloc_area_node is current static function and is called by only
>> __vmalloc_node_range. So warning in __vmalloc_node_range would cover all
>> vmalloc functions which have gfp_t argument.
>>
>> I Cced related maintainers.
>> If I miss someone, please Cced them.
>>
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -1648,6 +1648,10 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
>>  	void *addr;
>>  	unsigned long real_size = size;
>>  
>> +	WARN_ON_ONCE(!(gfp_mask & __GFP_WAIT) ||
>> +			!(gfp_mask & __GFP_IO) ||
>> +			!(gfp_mask & __GFP_FS));
>> +
>>  	size = PAGE_ALIGN(size);
>>  	if (!size || (size >> PAGE_SHIFT) > totalram_pages)
>>  		goto fail;
> 
> Well.  What are we actually doing here?  Causing the kernel to spew a
> warning due to known-buggy callsites, so that users will report the
> warnings, eventually goading maintainers into fixing their stuff.
> 
> This isn't very efficient :(


Yes. I hope maintainers fix it before merging this.

> 
> It would be better to fix that stuff first, then add the warning to
> prevent reoccurrences.  Yes, maintainers are very naughty and probably
> do need cattle prods^W^W warnings to motivate them to fix stuff, but we
> should first make an effort to get these things fixed without
> irritating and alarming our users.  
> 
> Where are these offending callsites?


dm:
__alloc_buffer_wait_no_callback

ubi:
ubi_dbg_check_write
ubi_dbg_check_all_ff

ext4 :
ext4_kvmalloc

gfs2 :
gfs2_alloc_sort_buffer

ntfs :
__ntfs_malloc

ubifs :
dbg_dump_leb
scan_check_cb
dump_lpt_leb
dbg_check_ltab_lnum
dbg_scan_orphans

mm :
alloc_large_system_hash

ceph :
fill_inode
ceph_setxattr
ceph_removexattr
ceph_x_build_authorizer
ceph_decode_buffer
ceph_alloc_middle



> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
> 



-- 
Kind regards,
Minchan Kim

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Minchan Kim <minchan@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	kosaki.motohiro@gmail.com, rientjes@google.com,
	Neil Brown <neilb@suse.de>,
	Artem Bityutskiy <dedekind1@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Steven Whitehouse <swhiteho@redhat.com>,
	"David S. Miller" <davem@davemloft.net>,
	James Morris <jmorris@namei.org>,
	Alexander Viro <viro@zeniv.linux.org.uk>,
	Sage Weil <sage@newdream.net>
Subject: Re: [PATCH] vmalloc: add warning in __vmalloc
Date: Thu, 03 May 2012 10:02:52 +0900	[thread overview]
Message-ID: <4FA1D93C.9000306@kernel.org> (raw)
In-Reply-To: <20120502124610.175e099c.akpm@linux-foundation.org>

On 05/03/2012 04:46 AM, Andrew Morton wrote:

> On Wed,  2 May 2012 13:28:09 +0900
> Minchan Kim <minchan@kernel.org> wrote:
> 
>> Now there are several places to use __vmalloc with GFP_ATOMIC,
>> GFP_NOIO, GFP_NOFS but unfortunately __vmalloc calls map_vm_area
>> which calls alloc_pages with GFP_KERNEL to allocate page tables.
>> It means it's possible to happen deadlock.
>> I don't know why it doesn't have reported until now.
>>
>> Firstly, I tried passing gfp_t to lower functions to support __vmalloc
>> with such flags but other mm guys don't want and decided that
>> all of caller should be fixed.
>>
>> http://marc.info/?l=linux-kernel&m=133517143616544&w=2
>>
>> To begin with, let's listen other's opinion whether they can fix it
>> by other approach without calling __vmalloc with such flags.
>>
>> So this patch adds warning in __vmalloc_node_range to detect it and
>> to be fixed hopely. __vmalloc_node_range isn't random chocie because
>> all caller which has gfp_mask of map_vm_area use it through __vmalloc_area_node.
>> And __vmalloc_area_node is current static function and is called by only
>> __vmalloc_node_range. So warning in __vmalloc_node_range would cover all
>> vmalloc functions which have gfp_t argument.
>>
>> I Cced related maintainers.
>> If I miss someone, please Cced them.
>>
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -1648,6 +1648,10 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align,
>>  	void *addr;
>>  	unsigned long real_size = size;
>>  
>> +	WARN_ON_ONCE(!(gfp_mask & __GFP_WAIT) ||
>> +			!(gfp_mask & __GFP_IO) ||
>> +			!(gfp_mask & __GFP_FS));
>> +
>>  	size = PAGE_ALIGN(size);
>>  	if (!size || (size >> PAGE_SHIFT) > totalram_pages)
>>  		goto fail;
> 
> Well.  What are we actually doing here?  Causing the kernel to spew a
> warning due to known-buggy callsites, so that users will report the
> warnings, eventually goading maintainers into fixing their stuff.
> 
> This isn't very efficient :(


Yes. I hope maintainers fix it before merging this.

> 
> It would be better to fix that stuff first, then add the warning to
> prevent reoccurrences.  Yes, maintainers are very naughty and probably
> do need cattle prods^W^W warnings to motivate them to fix stuff, but we
> should first make an effort to get these things fixed without
> irritating and alarming our users.  
> 
> Where are these offending callsites?


dm:
__alloc_buffer_wait_no_callback

ubi:
ubi_dbg_check_write
ubi_dbg_check_all_ff

ext4 :
ext4_kvmalloc

gfs2 :
gfs2_alloc_sort_buffer

ntfs :
__ntfs_malloc

ubifs :
dbg_dump_leb
scan_check_cb
dump_lpt_leb
dbg_check_ltab_lnum
dbg_scan_orphans

mm :
alloc_large_system_hash

ceph :
fill_inode
ceph_setxattr
ceph_removexattr
ceph_x_build_authorizer
ceph_decode_buffer
ceph_alloc_middle



> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
> 



-- 
Kind regards,
Minchan Kim

  reply	other threads:[~2012-05-03  1:03 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-02  4:28 [PATCH] vmalloc: add warning in __vmalloc Minchan Kim
2012-05-02  4:28 ` Minchan Kim
2012-05-02 19:46 ` Andrew Morton
2012-05-02 19:46   ` Andrew Morton
2012-05-03  1:02   ` Minchan Kim [this message]
2012-05-03  1:02     ` Minchan Kim
2012-05-03  5:46     ` Sage Weil
2012-05-03  5:46       ` Sage Weil
2012-05-03  6:30       ` Nick Piggin
2012-05-03  6:30         ` Nick Piggin
2012-05-03  7:13         ` Artem Bityutskiy
2012-05-03  7:14           ` Nick Piggin
2012-05-03  7:14             ` Nick Piggin
2012-05-03 13:48         ` Steven Whitehouse
2012-05-03 13:48           ` Steven Whitehouse
2012-05-03  5:55   ` Artem Bityutskiy
2012-05-03 11:11   ` Artem Bityutskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FA1D93C.9000306@kernel.org \
    --to=minchan@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.