From 74b31cff82d6c8a72fd7585264a5010b0680969a Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Wed, 16 May 2012 07:13:17 -0400 Subject: [PATCH] --- yaml --- r: 308792 b: refs/heads/master c: 2a1bb13853300bbb5a58eab006189d2c0dc215a0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/cifs/file.c | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 847e08523e7e..038ef107d84f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6993f74a5bf836210e7f253d5ad3f76d73a95f51 +refs/heads/master: 2a1bb13853300bbb5a58eab006189d2c0dc215a0 diff --git a/trunk/fs/cifs/file.c b/trunk/fs/cifs/file.c index ae285e0cf67b..d2a4259408e6 100644 --- a/trunk/fs/cifs/file.c +++ b/trunk/fs/cifs/file.c @@ -2366,6 +2366,23 @@ cifs_readdata_release(struct kref *refcount) kfree(rdata); } +static int +cifs_retry_async_readv(struct cifs_readdata *rdata) +{ + int rc; + + do { + if (rdata->cfile->invalidHandle) { + rc = cifs_reopen_file(rdata->cfile, true); + if (rc != 0) + continue; + } + rc = cifs_async_readv(rdata); + } while (rc == -EAGAIN); + + return rc; +} + static ssize_t cifs_iovec_read(struct file *file, const struct iovec *iov, unsigned long nr_segs, loff_t *poffset) @@ -2852,15 +2869,7 @@ static int cifs_readpages(struct file *file, struct address_space *mapping, rdata->marshal_iov = cifs_readpages_marshal_iov; list_splice_init(&tmplist, &rdata->pages); - do { - if (open_file->invalidHandle) { - rc = cifs_reopen_file(open_file, true); - if (rc != 0) - continue; - } - rc = cifs_async_readv(rdata); - } while (rc == -EAGAIN); - + rc = cifs_retry_async_readv(rdata); if (rc != 0) { list_for_each_entry_safe(page, tpage, &rdata->pages, lru) {