diff -r 024a3c6aa3f7 -r fa1c4fb0a8da master/cdev.c --- a/master/cdev.c Tue Jul 06 15:09:57 2010 +0200 +++ b/master/cdev.c Tue Jul 06 17:40:20 2010 +0200 @@ -881,7 +881,11 @@ if (request.req.state != EC_INT_REQUEST_SUCCESS) { data.data_size = 0; - retval = -EIO; + if (request.req.errno) { + retval = -request.req.errno; + } else { + retval = -EIO; + } } else { if (request.req.data_size > data.target_size) { EC_MASTER_ERR(master, "Buffer too small.\n"); @@ -986,7 +990,13 @@ data.abort_code = request.req.abort_code; - retval = request.req.state == EC_INT_REQUEST_SUCCESS ? 0 : -EIO; + if (request.req.state == EC_INT_REQUEST_SUCCESS) { + retval = 0; + } else if (request.req.errno) { + retval = -request.req.errno; + } else { + retval = -EIO; + } if (__copy_to_user((void __user *) arg, &data, sizeof(data))) { retval = -EFAULT;