From: =?UTF-8?B?VG9yYWxmIEbDtnJzdGVy?= Subject: Re: [uml-devel] fuzz tested 32 bit user mode linux image hangs in radix_tree_next_chunk() Date: Sun, 17 Nov 2013 16:03:44 +0100 Message-ID: <5288DAD0.5020306@gmx.de> References: <526696BF.6050909@gmx.de> <5266A698.10400@gmx.de> <5266B60A.1000005@nod.at> <52715AD1.7000703@gmx.de> <527AB23D.2060305@gmx.de> <527AB51B.1020005@nod.at> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: Konstantin Khlebnikov , Linux Kernel , linux-fsdevel , "linux-mm@kvack.org" , UML devel To: Richard Weinberger Return-path: In-Reply-To: <527AB51B.1020005@nod.at> Sender: owner-linux-mm@kvack.org List-Id: linux-fsdevel.vger.kernel.org On 11/06/2013 10:31 PM, Richard Weinberger wrote: > Am 06.11.2013 22:18, schrieb Toralf F=C3=B6rster: >> On 11/06/2013 05:06 PM, Konstantin Khlebnikov wrote: >>> In this case it must stop after scanning whole tree in line: >>> /* Overflow after ~0UL */ >>> if (!index) >>> return NULL; >>> >> >> A fresh current example with latest git tree shows that lines 769 and = 770 do alternate : >=20 > Can you please ask gdb for the value of offset? >=20 > Thanks, > //richard >=20 In the mean while I think that it is not the radix-tree itself where the = hang is related to. With this patch : diff --git a/mm/truncate.c b/mm/truncate.c index 353b683..22a5926 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -355,6 +355,8 @@ EXPORT_SYMBOL(truncate_inode_pages_range); */ void truncate_inode_pages(struct address_space *mapping, loff_t lstart) { + if (lstart > 0) + printk ("lstart=3D%lld\n", lstart); truncate_inode_pages_range(mapping, lstart, (loff_t)-1); } EXPORT_SYMBOL(truncate_inode_pages); against v3.12-10087-g1213959 I get in the syslog entires like : Nov 17 14:07:12 trinity tfoerste: M=3D/mnt/nfsv4 Nov 17 14:07:27 trinity kernel: lstart=3D2147418111 Nov 17 14:07:30 trinity kernel: lstart=3D14531581 Nov 17 14:07:30 trinity kernel: lstart=3D8388607 Nov 17 14:07:30 trinity kernel: lstart=3D187 Nov 17 14:07:32 trinity kernel: lstart=3D2048 Nov 17 14:08:00 trinity kernel: lstart=3D11264 Nov 17 14:08:00 trinity kernel: lstart=3D44297 Nov 17 14:08:05 trinity kernel: lstart=3D31 Nov 17 14:08:34 trinity kernel: lstart=3D1542 Nov 17 14:08:35 trinity kernel: lstart=3D30 Nov 17 14:08:35 trinity kernel: lstart=3D2088809 Nov 17 14:08:37 trinity kernel: lstart=3D208 Nov 17 14:08:37 trinity kernel: lstart=3D7276806 Nov 17 14:08:37 trinity kernel: lstart=3D191 ... Nov 17 14:11:22 trinity tfoerste: M=3D/mnt/nfsv4 Nov 17 14:11:36 trinity kernel: lstart=3D255 Nov 17 14:11:36 trinity kernel: lstart=3D500676444 Nov 17 14:11:37 trinity kernel: lstart=3D1024 Nov 17 14:11:37 trinity kernel: lstart=3D12786775 Nov 17 14:11:37 trinity kernel: lstart=3D16728385 Nov 17 14:11:37 trinity kernel: lstart=3D44 Nov 17 14:11:37 trinity kernel: lstart=3D516 Nov 17 14:11:38 trinity kernel: lstart=3D17407 Nov 17 14:11:38 trinity kernel: lstart=3D31 Nov 17 14:11:38 trinity kernel: lstart=3D65534 Nov 17 14:11:39 trinity kernel: lstart=3D4302304271 Nov 17 14:11:40 trinity kernel: lstart=3D65536 Nov 17 14:11:40 trinity kernel: lstart=3D678625087 Nov 17 14:11:40 trinity kernel: lstart=3D190464262 Nov 17 14:11:41 trinity kernel: lstart=3D268435343 Nov 17 14:11:42 trinity kernel: lstart=3D109 Nov 17 14:11:42 trinity kernel: lstart=3D2088960 Nov 17 14:11:42 trinity kernel: lstart=3D989582838 Nov 17 14:11:42 trinity kernel: lstart=3D3838 Nov 17 14:11:42 trinity kernel: lstart=3D327 Nov 17 14:11:43 trinity kernel: lstart=3D119 Nov 17 14:12:14 trinity kernel: lstart=3D9949 Nov 17 14:12:14 trinity kernel: lstart=3D4096 Nov 17 14:12:15 trinity kernel: lstart=3D3 Nov 17 14:12:18 trinity sshd[9636]: pam_unix(sshd:session): session close= d for user tfoerste ... Does this helps ? >> >> tfoerste@n22 ~/devel/linux $ sudo gdb /usr/local/bin/linux-v3.12-48-gb= e408cd 16619 -n -batch -ex bt >> 0x08296a8c in radix_tree_next_chunk (root=3D0x25, iter=3D0x462e7c64, f= lags=3D12) at lib/radix-tree.c:770 >> 770 if (node->slots[offset= ]) >> #0 0x08296a8c in radix_tree_next_chunk (root=3D0x25, iter=3D0x462e7c6= 4, flags=3D12) at lib/radix-tree.c:770 >> #1 0x080cc1fe in find_get_pages (mapping=3D0x462ad470, start=3D0, nr_= pages=3D14, pages=3D0xc) at mm/filemap.c:844 >> #2 0x080d5d6a in pagevec_lookup (pvec=3D0x462e7cc8, mapping=3D0x25, s= tart=3D37, nr_pages=3D37) at mm/swap.c:914 >> #3 0x080d615a in truncate_inode_pages_range (mapping=3D0x462ad470, ls= tart=3D0, lend=3D-1) at mm/truncate.c:241 >> #4 0x080d64ff in truncate_inode_pages (mapping=3D0x25, lstart=3D51539= 607589) at mm/truncate.c:358 >> >> >> >> >> tfoerste@n22 ~/devel/linux $ sudo gdb /usr/local/bin/linux-v3.12-48-gb= e408cd 16619 -n -batch -ex bt >> radix_tree_next_chunk (root=3D0x28, iter=3D0x462e7c64, flags=3D18) at = lib/radix-tree.c:769 >> 769 while (++offset < RADIX_TREE_M= AP_SIZE) { >> #0 radix_tree_next_chunk (root=3D0x28, iter=3D0x462e7c64, flags=3D18)= at lib/radix-tree.c:769 >> #1 0x080cc1fe in find_get_pages (mapping=3D0x462ad470, start=3D0, nr_= pages=3D14, pages=3D0x12) at mm/filemap.c:844 >> #2 0x080d5d6a in pagevec_lookup (pvec=3D0x462e7cc8, mapping=3D0x28, s= tart=3D40, nr_pages=3D40) at mm/swap.c:914 >> #3 0x080d615a in truncate_inode_pages_range (mapping=3D0x462ad470, ls= tart=3D0, lend=3D-1) at mm/truncate.c:241 >> #4 0x080d64ff in truncate_inode_pages (mapping=3D0x28, lstart=3D77309= 411368) at mm/truncate.c:358 >> #5 0x0825e388 in hostfs_evict_inode (inode=3D0x462ad3b8) at fs/hostfs= /hostfs_kern.c:242 >> #6 0x0811a8df in evict (inode=3D0x462ad3b8) at fs/inode.c:549 >> >> >=20 >=20 --=20 MfG/Sincerely Toralf F=C3=B6rster pgp finger print: 7B1A 07F4 EC82 0F90 D4C2 8936 872A E508 7DB6 9DA3 -- 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/ . Don't email: email@kvack.org