diff -Naur orig/fs/readdir.c edited/fs/readdir.c --- orig/fs/readdir.c 2004-04-04 05:37:06.000000000 +0200 +++ edited/fs/readdir.c 2004-04-12 17:25:36.000000000 +0200 @@ -21,21 +21,16 @@ { struct inode *inode = file->f_dentry->d_inode; int res = -ENOTDIR; - if (!file->f_op || !file->f_op->readdir) - goto out; - - res = security_file_permission(file, MAY_READ); - if (res) - goto out; - - down(&inode->i_sem); - res = -ENOENT; - if (!IS_DEADDIR(inode)) { - res = file->f_op->readdir(file, buf, filler); - file_accessed(file); + if (file->f_op && file->f_op->readdir){ + if (!(res = security_file_permission(file, MAY_READ))){ + down(&inode->i_sem); + if (!IS_DEADDIR(inode)) { + res = file->f_op->readdir(file, buf, filler); + file_accessed(file); + }else res = -ENOENT; + up(&inode->i_sem); + } } - up(&inode->i_sem); -out: return res; }