[lkml]   [2009]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[patch 44/60] ext4: return -EIO not -ESTALE on directory traversal through deleted inode

    -stable review patch. If anyone has any objections, please let us know.

    From: Bryan Donlan <>

    (cherry picked from commit e6f009b0b45220c004672d41a58865e94946104d)

    ext4_iget() returns -ESTALE if invoked on a deleted inode, in order to
    report errors to NFS properly. However, in ext4_lookup(), this
    -ESTALE can be propagated to userspace if the filesystem is corrupted
    such that a directory entry references a deleted inode. This leads to
    a misleading error message - "Stale NFS file handle" - and confusion
    on the part of the admin.

    The bug can be easily reproduced by creating a new filesystem, making
    a link to an unused inode using debugfs, then mounting and attempting
    to ls -l said link.

    This patch thus changes ext4_lookup to return -EIO if it receives
    -ESTALE from ext4_iget(), as ext4 does for other filesystem metadata
    corruption; and also invokes the appropriate ext*_error functions when
    this case is detected.

    Signed-off-by: Bryan Donlan <>
    Cc: <>
    Signed-off-by: Andrew Morton <>
    Signed-off-by: "Theodore Ts'o" <>
    Signed-off-by: Greg Kroah-Hartman <>
    fs/ext4/namei.c | 12 ++++++++++--
    1 file changed, 10 insertions(+), 2 deletions(-)

    --- a/fs/ext4/namei.c
    +++ b/fs/ext4/namei.c
    @@ -1055,8 +1055,16 @@ static struct dentry *ext4_lookup(struct
    return ERR_PTR(-EIO);
    inode = ext4_iget(dir->i_sb, ino);
    - if (IS_ERR(inode))
    - return ERR_CAST(inode);
    + if (unlikely(IS_ERR(inode))) {
    + if (PTR_ERR(inode) == -ESTALE) {
    + ext4_error(dir->i_sb, __func__,
    + "deleted inode referenced: %u",
    + ino);
    + return ERR_PTR(-EIO);
    + } else {
    + return ERR_CAST(inode);
    + }
    + }
    return d_splice_alias(inode, dentry);

     \ /
      Last update: 2009-06-10 05:53    [W:0.022 / U:82.008 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site