Hi, It appears that uninitialized r[3] in xfs_bmap_add_extent_delay_real can potentially corrupt the startoff for a particular case. This sequence is below: xfs_bmap_add_extent_delay_real ( ... xfs_bmbt_irec_t r[3]; /* neighbor extent entries */ case 0: /* * Filling in the middle part of a previous delayed allocation. * Contiguity is impossible here. * This case is avoided almost all the time. */ temp = new->br_startoff - PREV.br_startoff; xfs_bmbt_set_blockcount(ep, temp); r[0] = *new; r[1].br_startoff = new_endoff; temp2 = PREV.br_startoff + PREV.br_blockcount - new_endoff; r[1].br_blockcount = temp2; xfs_bmap_insert_exlist(ip, idx + 1, 2, &r[0], XFS_DATA_FORK); ip->i_df.if_lastex = idx + 1; ip->i_d.di_nextents++; Look at extent r[1]. It does not set br_startblock. That is, it is any random value. Now, look at the xfs_bmbt_set_all. Though, it sets the blockcount later, the startoff does not get changed. #if XFS_BIG_BLKNOS ASSERT((s->br_startblock & XFS_MASK64HI(12)) == 0); r->l0 = ((xfs_bmbt_rec_base_t)extent_flag << 63) | ((xfs_bmbt_rec_base_t)s->br_startoff << 9) | ((xfs_bmbt_rec_base_t)s->br_startblock >> 43); Top 21 bits are taken as it is. However, only 9 bit should be taken. So, for random values, it corrupts the startoff which from 9-63 bits. r->l1 = ((xfs_bmbt_rec_base_t)s->br_startblock << 21) | ((xfs_bmbt_rec_base_t)s->br_blockcount & (xfs_bmbt_rec_base_t)XFS_MASK64LO(21)); I have attached a small program which does the same thing as it is being done here. I would appreciate if someone can verify that assertion is correct. Regards, Shailendra