From: Greg Kroah-Hartman Date: Mon, 7 Nov 2016 16:47:34 +0000 (+0100) Subject: remove wait_a_release/ X-Git-Tag: v4.4.31~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d96455e3836ade16209447b9b6511f5813477ea4;p=thirdparty%2Fkernel%2Fstable-queue.git remove wait_a_release/ --- diff --git a/wait_a_release/ubifs-abort-readdir-upon-error.patch b/wait_a_release/ubifs-abort-readdir-upon-error.patch deleted file mode 100644 index 3159ea12b6e..00000000000 --- a/wait_a_release/ubifs-abort-readdir-upon-error.patch +++ /dev/null @@ -1,59 +0,0 @@ -From c83ed4c9dbb358b9e7707486e167e940d48bfeed Mon Sep 17 00:00:00 2001 -From: Richard Weinberger -Date: Wed, 19 Oct 2016 12:43:07 +0200 -Subject: ubifs: Abort readdir upon error - -From: Richard Weinberger - -commit c83ed4c9dbb358b9e7707486e167e940d48bfeed upstream. - -If UBIFS is facing an error while walking a directory, it reports this -error and ubifs_readdir() returns the error code. But the VFS readdir -logic does not make the getdents system call fail in all cases. When the -readdir cursor indicates that more entries are present, the system call -will just return and the libc wrapper will try again since it also -knows that more entries are present. -This causes the libc wrapper to busy loop for ever when a directory is -corrupted on UBIFS. -A common approach do deal with corrupted directory entries is -skipping them by setting the cursor to the next entry. On UBIFS this -approach is not possible since we cannot compute the next directory -entry cursor position without reading the current entry. So all we can -do is setting the cursor to the "no more entries" position and make -getdents exit. - -Signed-off-by: Richard Weinberger -Signed-off-by: Greg Kroah-Hartman - ---- - fs/ubifs/dir.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - ---- a/fs/ubifs/dir.c -+++ b/fs/ubifs/dir.c -@@ -350,7 +350,7 @@ static unsigned int vfs_dent_type(uint8_ - */ - static int ubifs_readdir(struct file *file, struct dir_context *ctx) - { -- int err; -+ int err = 0; - struct qstr nm; - union ubifs_key key; - struct ubifs_dent_node *dent; -@@ -452,14 +452,12 @@ out: - kfree(file->private_data); - file->private_data = NULL; - -- if (err != -ENOENT) { -+ if (err != -ENOENT) - ubifs_err(c, "cannot find next direntry, error %d", err); -- return err; -- } - - /* 2 is a special value indicating that there are no more direntries */ - ctx->pos = 2; -- return 0; -+ return err; - } - - /* Free saved readdir() state when the directory is closed */