* [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() @ 2008-07-22 3:32 David Woodhouse 2008-07-22 3:36 ` kernel BUG at extent_map.c:275! David Woodhouse 2008-07-23 11:13 ` [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() Christoph Hellwig 0 siblings, 2 replies; 15+ messages in thread From: David Woodhouse @ 2008-07-22 3:32 UTC (permalink / raw) To: linux-btrfs Prevents the compiler emitting calls to __udivdi3() from libgcc on some platforms: WARNING: "__udivdi3" [/shiny/git/btrfs-kernel-unstable/btrfs.ko] undefi= ned! Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> --- Untested but ObviouslyCorrect=E2=84=A2. Now that I can load the module,= I hit a BUG() immediately -- but I don't think it's caused by this patch. qv. diff --git a/ordered-data.h b/ordered-data.h index 1794efd..1abe5f5 100644 --- a/ordered-data.h +++ b/ordered-data.h @@ -97,9 +97,12 @@ struct btrfs_ordered_extent { */ static inline int btrfs_ordered_sum_size(struct btrfs_root *root, u64 = bytes) { - unsigned long num_sectors =3D (bytes + root->sectorsize - 1) / - root->sectorsize; - num_sectors++; + unsigned long num_sectors; + + bytes +=3D root->sectorsize - 1; + do_div(bytes, root->sectorsize); + num_sectors =3D bytes + 1; + return sizeof(struct btrfs_ordered_sum) + num_sectors * sizeof(struct btrfs_sector_sum); } --=20 David Woodhouse Open Source Technology Centr= e David.Woodhouse@intel.com Intel Corporatio= n -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" = in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 15+ messages in thread
* kernel BUG at extent_map.c:275! 2008-07-22 3:32 [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() David Woodhouse @ 2008-07-22 3:36 ` David Woodhouse 2008-07-22 10:21 ` Chris Mason 2008-07-22 14:43 ` [PATCH] Remove BUG_ON(spin_trylock()) checks which have false positives on UP David Woodhouse 2008-07-23 11:13 ` [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() Christoph Hellwig 1 sibling, 2 replies; 15+ messages in thread From: David Woodhouse @ 2008-07-22 3:36 UTC (permalink / raw) To: linux-btrfs On Mon, 2008-07-21 at 23:32 -0400, David Woodhouse wrote: > Untested but ObviouslyCorrect=E2=84=A2. Now that I can load the modul= e, I hit a > BUG() immediately -- but I don't think it's caused by this patch. qv. Current progs-unstable and kernel-unstable. I created a 512MiB file and ran mkfs.btrfs on it, on the current Fedora kernel: shinybook /shiny/git/btrfs-progs-unstable $ dd if=3D/dev/zero of=3D/hom= e/dwmw2/btrfs.test bs=3D$((1024*1024)) count=3D512 512+0 records in 512+0 records out 536870912 bytes (537 MB) copied, 37.6313 s, 14.3 MB/s shinybook /shiny/git/btrfs-progs-unstable $ ./mkfs.btrfs /home/dwmw2/bt= rfs.test fs created label (null) on /home/dwmw2/btrfs.test nodesize 4096 leafsize 4096 sectorsize 4096 size 512.00MB shinybook /shiny/git/btrfs-progs-unstable $ sudo mount -tbtrfs -oloop /= home/dwmw2/btrfs.test /mnt/spare shinybook /shiny/git/btrfs-progs-unstable $ dmesg | tail -61=20 loop: module loaded device fsid 1119bbc059164661-acafbb6be44e5929 devid 1 transid 12 /dev/l= oop0 ------------[ cut here ]------------ kernel BUG at /shiny/git/btrfs-kernel-unstable/extent_map.c:275! Oops: Exception in kernel mode, sig: 5 [#1] PowerMac Modules linked in: loop btrfs libcrc32c b43legacy mac80211 rndis_wlan r= ndis_host cdc_ether usbnet mii cdc_acm airport bridge bnep orinoco_cs o= rinoco hermes hidp udf radeon drm rfkill_input hci_usb rfcomm l2cap blu= etooth autofs4 sunrpc ipv6 dm_mirror dm_mod therm_adt746x arc4 ecb cryp= to_blkcipher snd_aoa_i2sbus rfkill cfg80211 input_polldev snd_powermac = snd_seq_dummy pmac_zilog snd_seq_oss snd_seq_midi_event snd_seq ide_cd_= mod cdrom snd_seq_device sungem snd_pcm_oss snd_mixer_oss sungem_phy sn= d_pcm firewire_ohci firewire_core crc_itu_t snd_timer snd_page_alloc sn= d soundcore snd_aoa_soundbus ssb ext3 jbd mbcache uhci_hcd ohci_hcd ehc= i_hcd [last unloaded: b43legacy] NIP: f29b6b2c LR: f29cc9f8 CTR: c0090778 REGS: c671dbf0 TRAP: 0700 Tainted: P (2.6.25.10-86.fc9.ppc) MSR: 00029032 <EE,ME,IR,DR> CR: 24044448 XER: 00000000 TASK =3D c65736e0[25115] 'mount' THREAD: c671c000 GPR00: 00000001 c671dca0 c65736e0 e7b9e108 00400000 00000000 00000000 0= 0000000=20 GPR08: 00000001 00000000 00004000 00004000 00000000 20029a70 00000000 b= fcac591=20 GPR16: 20024880 20024870 bfcac56d e7b9e108 ec94b3c0 ec908400 e7b9f588 e= d473200=20 GPR24: 00000000 e7b9e108 e1109ab8 00000000 00000000 00000001 00000000 0= 0000000=20 NIP [f29b6b2c] lookup_extent_mapping+0x48/0x350 [btrfs] LR [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] Call Trace: [c671dca0] [00001000] 0x1000 (unreliable) [c671dcd0] [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] [c671dd20] [f29cd180] btrfs_read_sys_array+0x180/0x200 [btrfs] [c671dd70] [f29a7b40] open_ctree+0x620/0x928 [btrfs] [c671ddb0] [f2982334] btrfs_get_sb+0x224/0x3dc [btrfs] [c671de20] [c00b035c] vfs_kern_mount+0xa0/0x138 [c671de50] [c00b0444] do_kern_mount+0x40/0xf4 [c671de70] [c00c7f38] do_new_mount+0x6c/0xb8 [c671de90] [c00c8f1c] do_mount+0x1c8/0x1f4 [c671df10] [c00c8fd8] sys_mount+0x90/0xd8 [c671df40] [c00139dc] ret_from_syscall+0x0/0x38 --- Exception: c01 at 0x1fea3c54 LR =3D 0x20004fa8 Instruction dump: 7f87f114 90010034 7c791b78 7f85e040 419d0014 7f85e000 40be0014 7f86e840= =20 409d000c 3b80ffff 3ba0ffff 38000001 <0f000000> 80790004 2f830000 419e00= 6c=20 ---[ end trace 83a08bddd47794a5 ]--- BUG: sleeping function called from invalid context at kernel/rwsem.c:21 in_atomic():0, irqs_disabled():1 Call Trace: [c671da10] [c0008ddc] show_stack+0x4c/0x180 (unreliable) [c671da60] [c00346d4] __might_sleep+0xc8/0xd8 [c671da70] [c02ecc48] down_read+0x24/0x5c [c671da80] [c0069934] acct_collect+0x38/0x15c [c671daa0] [c003c9a4] do_exit+0x1c4/0x5a4 [c671dad0] [c0011e88] kernel_bad_stack+0x0/0x4c [c671daf0] [c0012040] _exception+0x58/0x154 [c671dbe0] [c001403c] ret_from_except_full+0x0/0x4c --- Exception: 700 at lookup_extent_mapping+0x48/0x350 [btrfs] LR =3D read_one_chunk+0xa0/0x2f0 [btrfs] [c671dca0] [00001000] 0x1000 (unreliable) [c671dcd0] [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] [c671dd20] [f29cd180] btrfs_read_sys_array+0x180/0x200 [btrfs] [c671dd70] [f29a7b40] open_ctree+0x620/0x928 [btrfs] [c671ddb0] [f2982334] btrfs_get_sb+0x224/0x3dc [btrfs] [c671de20] [c00b035c] vfs_kern_mount+0xa0/0x138 [c671de50] [c00b0444] do_kern_mount+0x40/0xf4 [c671de70] [c00c7f38] do_new_mount+0x6c/0xb8 [c671de90] [c00c8f1c] do_mount+0x1c8/0x1f4 [c671df10] [c00c8fd8] sys_mount+0x90/0xd8 [c671df40] [c00139dc] ret_from_syscall+0x0/0x38 --- Exception: c01 at 0x1fea3c54 LR =3D 0x20004fa8 shinybook /shiny/git/btrfs-kernel-unstable #=20 --=20 David Woodhouse Open Source Technology Centr= e David.Woodhouse@intel.com Intel Corporatio= n -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" = in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 3:36 ` kernel BUG at extent_map.c:275! David Woodhouse @ 2008-07-22 10:21 ` Chris Mason 2008-07-22 14:35 ` David Woodhouse 2008-07-22 14:43 ` [PATCH] Remove BUG_ON(spin_trylock()) checks which have false positives on UP David Woodhouse 1 sibling, 1 reply; 15+ messages in thread From: Chris Mason @ 2008-07-22 10:21 UTC (permalink / raw) To: David Woodhouse; +Cc: linux-btrfs On Mon, 2008-07-21 at 23:36 -0400, David Woodhouse wrote: > On Mon, 2008-07-21 at 23:32 -0400, David Woodhouse wrote: > > Untested but ObviouslyCorrect=E2=84=A2. Now that I can load the mod= ule, I hit a > > BUG() immediately -- but I don't think it's caused by this patch. q= v. >=20 > Current progs-unstable and kernel-unstable. I created a 512MiB file a= nd > ran mkfs.btrfs on it, on the current Fedora kernel: >=20 What kind of box is this? The current code should be fine on big endian, but that hasn't been tested recently. -chris > shinybook /shiny/git/btrfs-progs-unstable $ dd if=3D/dev/zero of=3D/h= ome/dwmw2/btrfs.test bs=3D$((1024*1024)) count=3D512 > 512+0 records in > 512+0 records out > 536870912 bytes (537 MB) copied, 37.6313 s, 14.3 MB/s > shinybook /shiny/git/btrfs-progs-unstable $ ./mkfs.btrfs /home/dwmw2/= btrfs.test fs created label (null) on /home/dwmw2/btrfs.test > nodesize 4096 leafsize 4096 sectorsize 4096 size 512.00MB > shinybook /shiny/git/btrfs-progs-unstable $ sudo mount -tbtrfs -oloop= /home/dwmw2/btrfs.test /mnt/spare > shinybook /shiny/git/btrfs-progs-unstable $ dmesg | tail -61=20 > loop: module loaded > device fsid 1119bbc059164661-acafbb6be44e5929 devid 1 transid 12 /dev= /loop0 > ------------[ cut here ]------------ > kernel BUG at /shiny/git/btrfs-kernel-unstable/extent_map.c:275! > Oops: Exception in kernel mode, sig: 5 [#1] > PowerMac > Modules linked in: loop btrfs libcrc32c b43legacy mac80211 rndis_wlan= rndis_host cdc_ether usbnet mii cdc_acm airport bridge bnep orinoco_cs= orinoco hermes hidp udf radeon drm rfkill_input hci_usb rfcomm l2cap b= luetooth autofs4 sunrpc ipv6 dm_mirror dm_mod therm_adt746x arc4 ecb cr= ypto_blkcipher snd_aoa_i2sbus rfkill cfg80211 input_polldev snd_powerma= c snd_seq_dummy pmac_zilog snd_seq_oss snd_seq_midi_event snd_seq ide_c= d_mod cdrom snd_seq_device sungem snd_pcm_oss snd_mixer_oss sungem_phy = snd_pcm firewire_ohci firewire_core crc_itu_t snd_timer snd_page_alloc = snd soundcore snd_aoa_soundbus ssb ext3 jbd mbcache uhci_hcd ohci_hcd e= hci_hcd [last unloaded: b43legacy] > NIP: f29b6b2c LR: f29cc9f8 CTR: c0090778 > REGS: c671dbf0 TRAP: 0700 Tainted: P (2.6.25.10-86.fc9.ppc= ) > MSR: 00029032 <EE,ME,IR,DR> CR: 24044448 XER: 00000000 > TASK =3D c65736e0[25115] 'mount' THREAD: c671c000 > GPR00: 00000001 c671dca0 c65736e0 e7b9e108 00400000 00000000 00000000= 00000000=20 > GPR08: 00000001 00000000 00004000 00004000 00000000 20029a70 00000000= bfcac591=20 > GPR16: 20024880 20024870 bfcac56d e7b9e108 ec94b3c0 ec908400 e7b9f588= ed473200=20 > GPR24: 00000000 e7b9e108 e1109ab8 00000000 00000000 00000001 00000000= 00000000=20 > NIP [f29b6b2c] lookup_extent_mapping+0x48/0x350 [btrfs] > LR [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] > Call Trace: > [c671dca0] [00001000] 0x1000 (unreliable) > [c671dcd0] [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] > [c671dd20] [f29cd180] btrfs_read_sys_array+0x180/0x200 [btrfs] > [c671dd70] [f29a7b40] open_ctree+0x620/0x928 [btrfs] > [c671ddb0] [f2982334] btrfs_get_sb+0x224/0x3dc [btrfs] > [c671de20] [c00b035c] vfs_kern_mount+0xa0/0x138 > [c671de50] [c00b0444] do_kern_mount+0x40/0xf4 > [c671de70] [c00c7f38] do_new_mount+0x6c/0xb8 > [c671de90] [c00c8f1c] do_mount+0x1c8/0x1f4 > [c671df10] [c00c8fd8] sys_mount+0x90/0xd8 > [c671df40] [c00139dc] ret_from_syscall+0x0/0x38 > --- Exception: c01 at 0x1fea3c54 > LR =3D 0x20004fa8 > Instruction dump: > 7f87f114 90010034 7c791b78 7f85e040 419d0014 7f85e000 40be0014 7f86e8= 40=20 > 409d000c 3b80ffff 3ba0ffff 38000001 <0f000000> 80790004 2f830000 419e= 006c=20 > ---[ end trace 83a08bddd47794a5 ]--- > BUG: sleeping function called from invalid context at kernel/rwsem.c:= 21 > in_atomic():0, irqs_disabled():1 > Call Trace: > [c671da10] [c0008ddc] show_stack+0x4c/0x180 (unreliable) > [c671da60] [c00346d4] __might_sleep+0xc8/0xd8 > [c671da70] [c02ecc48] down_read+0x24/0x5c > [c671da80] [c0069934] acct_collect+0x38/0x15c > [c671daa0] [c003c9a4] do_exit+0x1c4/0x5a4 > [c671dad0] [c0011e88] kernel_bad_stack+0x0/0x4c > [c671daf0] [c0012040] _exception+0x58/0x154 > [c671dbe0] [c001403c] ret_from_except_full+0x0/0x4c > --- Exception: 700 at lookup_extent_mapping+0x48/0x350 [btrfs] > LR =3D read_one_chunk+0xa0/0x2f0 [btrfs] > [c671dca0] [00001000] 0x1000 (unreliable) > [c671dcd0] [f29cc9f8] read_one_chunk+0xa0/0x2f0 [btrfs] > [c671dd20] [f29cd180] btrfs_read_sys_array+0x180/0x200 [btrfs] > [c671dd70] [f29a7b40] open_ctree+0x620/0x928 [btrfs] > [c671ddb0] [f2982334] btrfs_get_sb+0x224/0x3dc [btrfs] > [c671de20] [c00b035c] vfs_kern_mount+0xa0/0x138 > [c671de50] [c00b0444] do_kern_mount+0x40/0xf4 > [c671de70] [c00c7f38] do_new_mount+0x6c/0xb8 > [c671de90] [c00c8f1c] do_mount+0x1c8/0x1f4 > [c671df10] [c00c8fd8] sys_mount+0x90/0xd8 > [c671df40] [c00139dc] ret_from_syscall+0x0/0x38 > --- Exception: c01 at 0x1fea3c54 > LR =3D 0x20004fa8 > shinybook /shiny/git/btrfs-kernel-unstable #=20 >=20 >=20 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" = in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 10:21 ` Chris Mason @ 2008-07-22 14:35 ` David Woodhouse 2008-07-22 17:03 ` Chris Mason 0 siblings, 1 reply; 15+ messages in thread From: David Woodhouse @ 2008-07-22 14:35 UTC (permalink / raw) To: Chris Mason; +Cc: linux-btrfs On Tue, 2008-07-22 at 06:21 -0400, Chris Mason wrote: > What kind of box is this? The current code should be fine on big > endian, but that hasn't been tested recently. It's a PowerBook (ppc32). The bug is a BUG_ON(spin_trylock(&tree->lock)) in lookup_extent_mapping() -- I didn't think endianness was a likely factor in that. Being uniprocessor might be though -- don't we hard-code spin_trylock() to _always_ succeed on UP, unless spinlock debugging is enabled? I think that test needs to happen only if spinlocks aren't no-ops. Or have you moved past the point where you need it now, so can we just remove it? T'would be nice if lockdep or sparse could handle this for us -- we already have annotations which indicate that a function 'acquires' or 'releases' locks. I wonder if we could also do 'requires'? -- dwmw2 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 14:35 ` David Woodhouse @ 2008-07-22 17:03 ` Chris Mason 2008-07-22 17:41 ` David Woodhouse 0 siblings, 1 reply; 15+ messages in thread From: Chris Mason @ 2008-07-22 17:03 UTC (permalink / raw) To: David Woodhouse; +Cc: linux-btrfs On Tue, 2008-07-22 at 10:35 -0400, David Woodhouse wrote: > On Tue, 2008-07-22 at 06:21 -0400, Chris Mason wrote: > > What kind of box is this? The current code should be fine on big > > endian, but that hasn't been tested recently. > > It's a PowerBook (ppc32). > > The bug is a BUG_ON(spin_trylock(&tree->lock)) in > lookup_extent_mapping() -- I didn't think endianness was a likely factor > in that. I think the caller is doing this: spin_lock(&map_tree->map_tree.lock); em = lookup_extent_mapping(&map_tree->map_tree, logical, 1); spin_unlock(&map_tree->map_tree.lock); > Being uniprocessor might be though -- don't we hard-code spin_trylock() > to _always_ succeed on UP, unless spinlock debugging is enabled? > > I think that test needs to happen only if spinlocks aren't no-ops. Or > have you moved past the point where you need it now, so can we just > remove it? > Well, the test is there to make sure the caller is doing the right thing. Before we remove it, I'd like to understand why it is failing. -chris ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 17:03 ` Chris Mason @ 2008-07-22 17:41 ` David Woodhouse 2008-07-22 17:42 ` Zach Brown 2008-07-22 18:12 ` Chris Mason 0 siblings, 2 replies; 15+ messages in thread From: David Woodhouse @ 2008-07-22 17:41 UTC (permalink / raw) To: Chris Mason; +Cc: linux-btrfs On Tue, 2008-07-22 at 13:03 -0400, Chris Mason wrote: > Well, the test is there to make sure the caller is doing the right > thing. Before we remove it, I'd like to understand why it is failing. Because this is a uniprocessor kernel. So spin_lock() and spin_unlock() both do absolutely nothing, and spin_trylock() _always_ returns 1. -- David Woodhouse Open Source Technology Centre David.Woodhouse@intel.com Intel Corporation ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 17:41 ` David Woodhouse @ 2008-07-22 17:42 ` Zach Brown 2008-07-22 18:04 ` David Woodhouse 2008-07-22 18:12 ` Chris Mason 1 sibling, 1 reply; 15+ messages in thread From: Zach Brown @ 2008-07-22 17:42 UTC (permalink / raw) To: David Woodhouse; +Cc: Chris Mason, linux-btrfs David Woodhouse wrote: > On Tue, 2008-07-22 at 13:03 -0400, Chris Mason wrote: >> Well, the test is there to make sure the caller is doing the right >> thing. Before we remove it, I'd like to understand why it is failing. > > Because this is a uniprocessor kernel. So spin_lock() and spin_unlock() > both do absolutely nothing, and spin_trylock() _always_ returns 1. How about using assert_spin_locked()? - z ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 17:42 ` Zach Brown @ 2008-07-22 18:04 ` David Woodhouse 2008-07-24 14:34 ` Chris Mason 0 siblings, 1 reply; 15+ messages in thread From: David Woodhouse @ 2008-07-22 18:04 UTC (permalink / raw) To: Zach Brown; +Cc: Chris Mason, linux-btrfs On Tue, 2008-07-22 at 10:42 -0700, Zach Brown wrote: > David Woodhouse wrote: > > On Tue, 2008-07-22 at 13:03 -0400, Chris Mason wrote: > >> Well, the test is there to make sure the caller is doing the right > >> thing. Before we remove it, I'd like to understand why it is failing. > > > > Because this is a uniprocessor kernel. So spin_lock() and spin_unlock() > > both do absolutely nothing, and spin_trylock() _always_ returns 1. > > How about using assert_spin_locked()? Yeah, that should work if we still need these checks. diff --git a/extent_map.c b/extent_map.c index 71b1ac1..c68abd8 100644 --- a/extent_map.c +++ b/extent_map.c @@ -209,7 +209,7 @@ int add_extent_mapping(struct extent_map_tree *tree, struct extent_map *merge = NULL; struct rb_node *rb; - BUG_ON(spin_trylock(&tree->lock)); + assert_spin_locked(&tree->lock); rb = tree_insert(&tree->map, em->start, &em->rb_node); if (rb) { ret = -EEXIST; @@ -272,7 +272,7 @@ struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree, struct rb_node *next = NULL; u64 end = range_end(start, len); - BUG_ON(spin_trylock(&tree->lock)); + assert_spin_locked(&tree->lock); em = tree->last; if (em && end > em->start && start < extent_map_end(em)) goto found; @@ -324,7 +324,7 @@ int remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em) int ret = 0; WARN_ON(test_bit(EXTENT_FLAG_PINNED, &em->flags)); - BUG_ON(spin_trylock(&tree->lock)); + assert_spin_locked(&tree->lock); rb_erase(&em->rb_node, &tree->map); em->in_tree = 0; if (tree->last == em) -- dwmw2 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 18:04 ` David Woodhouse @ 2008-07-24 14:34 ` Chris Mason 0 siblings, 0 replies; 15+ messages in thread From: Chris Mason @ 2008-07-24 14:34 UTC (permalink / raw) To: David Woodhouse; +Cc: Zach Brown, linux-btrfs On Tue, 2008-07-22 at 14:04 -0400, David Woodhouse wrote: > On Tue, 2008-07-22 at 10:42 -0700, Zach Brown wrote: > > David Woodhouse wrote: > > > On Tue, 2008-07-22 at 13:03 -0400, Chris Mason wrote: > > >> Well, the test is there to make sure the caller is doing the right > > >> thing. Before we remove it, I'd like to understand why it is failing. > > > > > > Because this is a uniprocessor kernel. So spin_lock() and spin_unlock() > > > both do absolutely nothing, and spin_trylock() _always_ returns 1. > > > > How about using assert_spin_locked()? > > Yeah, that should work if we still need these checks. > This one is applied now and pushed out. -chris ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: kernel BUG at extent_map.c:275! 2008-07-22 17:41 ` David Woodhouse 2008-07-22 17:42 ` Zach Brown @ 2008-07-22 18:12 ` Chris Mason 1 sibling, 0 replies; 15+ messages in thread From: Chris Mason @ 2008-07-22 18:12 UTC (permalink / raw) To: David Woodhouse; +Cc: linux-btrfs On Tue, 2008-07-22 at 13:41 -0400, David Woodhouse wrote: > On Tue, 2008-07-22 at 13:03 -0400, Chris Mason wrote: > > Well, the test is there to make sure the caller is doing the right > > thing. Before we remove it, I'd like to understand why it is failing. > > Because this is a uniprocessor kernel. So spin_lock() and spin_unlock() > both do absolutely nothing, and spin_trylock() _always_ returns 1. > Duh, sorry that's what you were saying all along. For some reason I saw UP machine on SMP kernel in your email. Thanks for the patch, I'll pull it in. -chris ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH] Remove BUG_ON(spin_trylock()) checks which have false positives on UP 2008-07-22 3:36 ` kernel BUG at extent_map.c:275! David Woodhouse 2008-07-22 10:21 ` Chris Mason @ 2008-07-22 14:43 ` David Woodhouse 1 sibling, 0 replies; 15+ messages in thread From: David Woodhouse @ 2008-07-22 14:43 UTC (permalink / raw) To: linux-btrfs On uniprocessor kernels without spinlock debugging, spinlock operations are all no-ops and spin_trylock() will always succeed. These BUG_ON() sanity checks are effectively an unconditional BUG() in that case. Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> diff --git a/extent_map.c b/extent_map.c index 71b1ac1..6a72961 100644 --- a/extent_map.c +++ b/extent_map.c @@ -209,7 +209,6 @@ int add_extent_mapping(struct extent_map_tree *tree, struct extent_map *merge = NULL; struct rb_node *rb; - BUG_ON(spin_trylock(&tree->lock)); rb = tree_insert(&tree->map, em->start, &em->rb_node); if (rb) { ret = -EEXIST; @@ -272,7 +271,6 @@ struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree, struct rb_node *next = NULL; u64 end = range_end(start, len); - BUG_ON(spin_trylock(&tree->lock)); em = tree->last; if (em && end > em->start && start < extent_map_end(em)) goto found; @@ -324,7 +322,6 @@ int remove_extent_mapping(struct extent_map_tree *tree, struct extent_map *em) int ret = 0; WARN_ON(test_bit(EXTENT_FLAG_PINNED, &em->flags)); - BUG_ON(spin_trylock(&tree->lock)); rb_erase(&em->rb_node, &tree->map); em->in_tree = 0; if (tree->last == em) -- David Woodhouse Open Source Technology Centre David.Woodhouse@intel.com Intel Corporation ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() 2008-07-22 3:32 [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() David Woodhouse 2008-07-22 3:36 ` kernel BUG at extent_map.c:275! David Woodhouse @ 2008-07-23 11:13 ` Christoph Hellwig 2008-07-23 13:28 ` Chris Mason 1 sibling, 1 reply; 15+ messages in thread From: Christoph Hellwig @ 2008-07-23 11:13 UTC (permalink / raw) To: David Woodhouse; +Cc: linux-btrfs Chris, can you please put this patch in? Without it btrfs can't be loaded on 32bit platforms. On Mon, Jul 21, 2008 at 11:32:08PM -0400, David Woodhouse wrote: > Prevents the compiler emitting calls to __udivdi3() from libgcc on some > platforms: > WARNING: "__udivdi3" [/shiny/git/btrfs-kernel-unstable/btrfs.ko] undefined! > > Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> > --- > Untested but ObviouslyCorrect???. Now that I can load the module, I hit a > BUG() immediately -- but I don't think it's caused by this patch. qv. > > diff --git a/ordered-data.h b/ordered-data.h > index 1794efd..1abe5f5 100644 > --- a/ordered-data.h > +++ b/ordered-data.h > @@ -97,9 +97,12 @@ struct btrfs_ordered_extent { > */ > static inline int btrfs_ordered_sum_size(struct btrfs_root *root, u64 bytes) > { > - unsigned long num_sectors = (bytes + root->sectorsize - 1) / > - root->sectorsize; > - num_sectors++; > + unsigned long num_sectors; > + > + bytes += root->sectorsize - 1; > + do_div(bytes, root->sectorsize); > + num_sectors = bytes + 1; > + > return sizeof(struct btrfs_ordered_sum) + > num_sectors * sizeof(struct btrfs_sector_sum); > } > > -- > David Woodhouse Open Source Technology Centre > David.Woodhouse@intel.com Intel Corporation > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ---end quoted text--- ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() 2008-07-23 11:13 ` [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() Christoph Hellwig @ 2008-07-23 13:28 ` Chris Mason 2008-07-23 21:07 ` David Woodhouse 0 siblings, 1 reply; 15+ messages in thread From: Chris Mason @ 2008-07-23 13:28 UTC (permalink / raw) To: Christoph Hellwig; +Cc: David Woodhouse, linux-btrfs On Wed, 2008-07-23 at 07:13 -0400, Christoph Hellwig wrote: > Chris, can you please put this patch in? Without it btrfs can't be > loaded on 32bit platforms. > I've pushed out a slightly different fix. The ordered extents are based on ram writeback, and so an unsigned long is enough. -chris ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() 2008-07-23 13:28 ` Chris Mason @ 2008-07-23 21:07 ` David Woodhouse 2008-07-24 0:19 ` Chris Mason 0 siblings, 1 reply; 15+ messages in thread From: David Woodhouse @ 2008-07-23 21:07 UTC (permalink / raw) To: Chris Mason; +Cc: Christoph Hellwig, linux-btrfs On Wed, 2008-07-23 at 09:28 -0400, Chris Mason wrote: > On Wed, 2008-07-23 at 07:13 -0400, Christoph Hellwig wrote: > > Chris, can you please put this patch in? Without it btrfs can't be > > loaded on 32bit platforms. > > > > I've pushed out a slightly different fix. The ordered extents are > based on ram writeback, and so an unsigned long is enough. Does the job for me, although we still need the s/BUG_ON(spin_trylock(&tree->lock))/assert_spin_locked(&tree->lock)/ patch I sent a few days ago. Now I can actually build the module, load it and avoid it hitting a BUG_ON() when it first tries to mount, I can perhaps move on to doing something more useful with it... :) -- David Woodhouse Open Source Technology Centre David.Woodhouse@intel.com Intel Corporation ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() 2008-07-23 21:07 ` David Woodhouse @ 2008-07-24 0:19 ` Chris Mason 0 siblings, 0 replies; 15+ messages in thread From: Chris Mason @ 2008-07-24 0:19 UTC (permalink / raw) To: David Woodhouse; +Cc: Christoph Hellwig, linux-btrfs On Wed, 2008-07-23 at 17:07 -0400, David Woodhouse wrote: > On Wed, 2008-07-23 at 09:28 -0400, Chris Mason wrote: > > On Wed, 2008-07-23 at 07:13 -0400, Christoph Hellwig wrote: > > > Chris, can you please put this patch in? Without it btrfs can't be > > > loaded on 32bit platforms. > > > > > > > I've pushed out a slightly different fix. The ordered extents are > > based on ram writeback, and so an unsigned long is enough. > > Does the job for me, although we still need the > s/BUG_ON(spin_trylock(&tree->lock))/assert_spin_locked(&tree->lock)/ > patch I sent a few days ago. > > Now I can actually build the module, load it and avoid it hitting a > BUG_ON() when it first tries to mount, I can perhaps move on to doing > something more useful with it... :) ;) My goal tonight is to figure out why I'm leaving locked data pages everywhere. Once that is done I'll be able to finally integrate the pending patches. -chris ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2008-07-24 14:34 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-07-22 3:32 [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() David Woodhouse 2008-07-22 3:36 ` kernel BUG at extent_map.c:275! David Woodhouse 2008-07-22 10:21 ` Chris Mason 2008-07-22 14:35 ` David Woodhouse 2008-07-22 17:03 ` Chris Mason 2008-07-22 17:41 ` David Woodhouse 2008-07-22 17:42 ` Zach Brown 2008-07-22 18:04 ` David Woodhouse 2008-07-24 14:34 ` Chris Mason 2008-07-22 18:12 ` Chris Mason 2008-07-22 14:43 ` [PATCH] Remove BUG_ON(spin_trylock()) checks which have false positives on UP David Woodhouse 2008-07-23 11:13 ` [PATCH] Use do_div() instead of native 64-bit division in btrfs_ordered_sum_size() Christoph Hellwig 2008-07-23 13:28 ` Chris Mason 2008-07-23 21:07 ` David Woodhouse 2008-07-24 0:19 ` Chris Mason
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox