From 6f4547c9150e22478b0ba48ade9dc0b8815b4807 Mon Sep 17 00:00:00 2001 From: Simon Derr Date: Mon, 17 Sep 2012 15:16:28 +0200 Subject: [PATCH] --- yaml --- r: 333411 b: refs/heads/master c: 0462194d358c2e040282d4d1a4fd1aab84417e42 h: refs/heads/master i: 333409: 630d4400261f146e2edfb510666dfc77b21cd21f 333407: bd7ca2221bcf2774690144e5dbf4181930d52b27 v: v3 --- [refs] | 2 +- trunk/net/9p/trans_fd.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 3369dc0909f0..1e92be50382d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e549c1337133e85a6d6bc868d2d141a61a80975c +refs/heads/master: 0462194d358c2e040282d4d1a4fd1aab84417e42 diff --git a/trunk/net/9p/trans_fd.c b/trunk/net/9p/trans_fd.c index 6449bae15702..de1bbad0c7de 100644 --- a/trunk/net/9p/trans_fd.c +++ b/trunk/net/9p/trans_fd.c @@ -316,8 +316,7 @@ static void p9_read_work(struct work_struct *work) m->rsize - m->rpos); p9_debug(P9_DEBUG_TRANS, "mux %p got %d bytes\n", m, err); if (err == -EAGAIN) { - clear_bit(Rworksched, &m->wsched); - return; + goto end_clear; } if (err <= 0) @@ -379,19 +378,20 @@ static void p9_read_work(struct work_struct *work) m->req = NULL; } +end_clear: + clear_bit(Rworksched, &m->wsched); + if (!list_empty(&m->req_list)) { if (test_and_clear_bit(Rpending, &m->wsched)) n = POLLIN; else n = p9_fd_poll(m->client, NULL); - if (n & POLLIN) { + if ((n & POLLIN) && !test_and_set_bit(Rworksched, &m->wsched)) { p9_debug(P9_DEBUG_TRANS, "sched read work %p\n", m); schedule_work(&m->rq); - } else - clear_bit(Rworksched, &m->wsched); - } else - clear_bit(Rworksched, &m->wsched); + } + } return; error: