On Tue, Apr 17, 2018 at 04:39:16PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > When we have corrupted free inode btrees, we can attempt to > allocate inodes that we know are already allocated. Catch allocation > of these inodes and report corruption as early as possible to > prevent corruption propagation or deadlocks. > > Signed-Off-By: Dave Chinner <dchinner@xxxxxxxxxx> > --- Looks good Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > fs/xfs/xfs_inode.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 7b764f746ff2..12e6c1aec386 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -790,6 +790,19 @@ xfs_ialloc( > } > ASSERT(*ialloc_context == NULL); > > + /* > + * Protect against obviously corrupt allocation btree records. Later > + * xfs_iget checks will catch re-allocation of other active in-memory > + * and on-disk inodes. If we don't catch reallocating the parent inode > + * here we will deadlock in xfs_iget() so we have to do these checks > + * first. > + */ > + if ((pip && ino == pip->i_ino) || > + !xfs_verify_dir_ino(mp, ino)) { > + xfs_alert(mp, "Allocated a known in-use inode 0x%llx!", ino); > + return -EFSCORRUPTED; > + } > + > /* > * Get the in-core inode with the lock held exclusively. > * This is because we're setting fields here we need > -- > 2.16.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Carlos -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html