On Tue, Apr 17, 2018 at 05:44:40PM -0700, Darrick J. Wong wrote: > > diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c > > index df92e3ec9913..33a2c98ce1ff 100644 > > --- a/fs/ext4/ialloc.c > > +++ b/fs/ext4/ialloc.c > > @@ -143,7 +143,7 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) > > ext4_error(sb, "Cannot read inode bitmap - " > > "block_group = %u, inode_bitmap = %llu", > > block_group, bitmap_blk); > > - return ERR_PTR(-EIO); > > + return ERR_PTR(-ENOMEM); > > Uh... yes this can fail due to IO errors. If __bread_slow calls > submit_bh, waits for the buffer, and the buffer isn't uptodate after the > IO completes, that means that there was an IO error. It's a little > dorky that we can't distinguish that vs. an actual ENOMEM, but oh well. ... but as near as I can tell, there are no paths where sb_getblk() will end up calling __bread_slow(). We *should* change all of the functions which call the *getblk* family of functions and convert them to using the ERR_PTR protocol. But that's going to be pretty large change, and getting all of them would be painful. - Ted