Project

General

Profile

Bug #58005

Updated by Xuehan Xu over 1 year ago

It seems that when "seastar::need_preempt" is true, "crimson::do_for_each" will turn into a long recursive function. And since we are letting crimson-osd to use full disk space, the number of segments can be very large, which can make the program stack overflow by the recursive "crimson::do_for_each". May need to re-implement "crimson::do_for_each/repeat" 

 <pre> 
 #4    0x0000000001820560 in FatalSignal::signaled(int, siginfo_t const&) () 
 #5    0x00000000018212db in FatalSignal::signal_entry(int, siginfo_t*, void*) () 
 #6    <signal handler called> 
 #7    0x00000000020cfe3b in crimson::os::seastore::segment_manager::block::BlockSegmentManager::read(crimson::os::seastore::paddr_t, unsigned long, ceph::buffer::v15_2_0::ptr&) () 
 #8    0x000000000254d533 in crimson::os::seastore::Device::read(crimson::os::seastore::paddr_t, unsigned long) () 
 #9    0x00000000025415ae in crimson::os::seastore::SegmentManagerGroup::read_segment_header(crimson::os::seastore::segment_id_t) () 
 #10 0x000000000219cbba in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #11 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #12 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #13 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #14 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #15 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #16 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #17 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #18 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #19 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #20 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #21 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #22 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #23 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #24 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #25 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #26 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #27 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #28 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #29 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #30 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #31 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #32 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #33 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #34 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #35 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #36 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #37 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #38 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 
 #39 0x000000000219d3df in auto crimson::do_for_each<crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}>(crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::segment_map_t<crimson::os::seastore::segment_info_t>::iterator<true>, crimson::os::seastore::SegmentCleaner::mount()::{lambda(auto:1&)#1}) () 

 </pre>

Back