Panic at BUG_ON(force && !conf->barrier);

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Shaohua

I encounter one panic recent in rhel7.6. The test is:
1. Create some VDO devices
2. Create raid10 device on 4 vdo devices
3. Reshape raid10 device to 6 vdo devices. 

When sector_nr <= last it needs to goto read_more. If the r10_bio containing the
read_bio which is submitted before goto has freed and lower_barrier has called. 
It'll panic at BUG_ON(force && !conf->barrier)

The possibility of this is decreased by c85ba1 (md: raid1/raid10: don't handle failure of bio_add_page())
In the test case bio_add_page fails after adding one page. It usually calls goto read_more. So the
problem happens easily. 

But in upstream it still has the possibility to hit the BUG_ON. Because the max_sectors return from
read_balance can let sector_nr <= last. 

Do you think it's the right way to fix this?

diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 35bd3a6..f6de031 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -4535,7 +4535,7 @@ static sector_t reshape_request(struct mddev *mddev, sector_t sector_nr,
        /* Now schedule reads for blocks from sector_nr to last */
        r10_bio = raid10_alloc_init_r10buf(conf);
        r10_bio->state = 0;
-       raise_barrier(conf, sectors_done != 0);
+       raise_barrier(conf, 0);
        atomic_set(&r10_bio->remaining, 0);
        r10_bio->mddev = mddev;
        r10_bio->sector = sector_nr;

Best Regards
Xiao



[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux