diff --git a/iscsi-scst/kernel/isert-scst/isert_login.c b/iscsi-scst/kernel/isert-scst/isert_login.c index 8ee988801..eb764f2aa 100644 --- a/iscsi-scst/kernel/isert-scst/isert_login.c +++ b/iscsi-scst/kernel/isert-scst/isert_login.c @@ -555,6 +555,9 @@ static ssize_t isert_read(struct file *filp, char __user *buf, size_t count, struct isert_conn_dev *dev = filp->private_data; size_t to_read; + if (dev->state == CS_DISCONNECTED) + return -EPIPE; + if (will_read_block(dev)) { int ret; if (filp->f_flags & O_NONBLOCK) @@ -565,9 +568,6 @@ static ssize_t isert_read(struct file *filp, char __user *buf, size_t count, return ret; } - if (dev->state == CS_DISCONNECTED) - return -EPIPE; - to_read = min(count, dev->read_len); if (copy_to_user(buf, dev->read_buf, to_read)) return -EFAULT; @@ -769,11 +769,13 @@ static unsigned int isert_poll(struct file *filp, poll_wait(filp, &dev->waitqueue, wait); if (!dev->conn) - mask |= POLLHUP | POLLERR; - if (!will_read_block(dev)) - mask |= POLLIN | POLLRDNORM; + mask |= POLLHUP | POLLIN; + else { + if (!will_read_block(dev)) + mask |= POLLIN | POLLRDNORM; - mask |= POLLOUT | POLLWRNORM; + mask |= POLLOUT | POLLWRNORM; + } return mask; }