Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1209bbdf authored by Pavel Shilovsky's avatar Pavel Shilovsky Committed by Steve French
Browse files

CIFS: Fix readpages retrying on reconnects



If we got a reconnect error from async readv we re-add pages back
to page_list and continue loop. That is wrong because these pages
have been already added to the pagecache but page_list has pages that
have not been added to the pagecache yet. This ends up with a general
protection fault in put_pages after readpages. Fix it by not retrying
the read of these pages and falling back to readpage instead.

Fixes debian bug 762306

Signed-off-by: default avatarPavel Shilovsky <pshilovsky@samba.org>
Signed-off-by: default avatarSteve French <smfrench@gmail.com>
Tested-by: default avatarArthur Marsh <arthur.marsh@internode.on.net>
parent 19e81573
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -3568,15 +3568,9 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
				lru_cache_add_file(page);
				unlock_page(page);
				page_cache_release(page);
				if (rc == -EAGAIN)
					list_add_tail(&page->lru, &tmplist);
			}
			/* Fallback to the readpage in error/reconnect cases */
			kref_put(&rdata->refcount, cifs_readdata_release);
			if (rc == -EAGAIN) {
				/* Re-add pages to the page_list and retry */
				list_splice(&tmplist, page_list);
				continue;
			}
			break;
		}