diff --git a/server/device.c b/server/device.c
index 6726f4b22cfa6535bdf3b1a35c6bbf6df6f28fd4..16043f509ea2a5bf9542f4864c9bffe096deb5c2 100644
--- a/server/device.c
+++ b/server/device.c
@@ -174,7 +174,7 @@ static struct fd *device_file_get_fd( struct object *obj );
 static int device_file_close_handle( struct object *obj, struct process *process, obj_handle_t handle );
 static void device_file_destroy( struct object *obj );
 static enum server_fd_type device_file_get_fd_type( struct fd *fd );
-static obj_handle_t device_file_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos );
+static obj_handle_t device_file_read( struct fd *fd, struct async *async, file_pos_t pos );
 static obj_handle_t device_file_write( struct fd *fd, struct async *async, int blocking, file_pos_t pos );
 static obj_handle_t device_file_flush( struct fd *fd, struct async *async, int blocking );
 static obj_handle_t device_file_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
@@ -484,7 +484,7 @@ static enum server_fd_type device_file_get_fd_type( struct fd *fd )
     return FD_TYPE_DEVICE;
 }
 
-static obj_handle_t device_file_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos )
+static obj_handle_t device_file_read( struct fd *fd, struct async *async, file_pos_t pos )
 {
     struct device_file *file = get_fd_user( fd );
     struct irp_call *irp;
diff --git a/server/fd.c b/server/fd.c
index 7e1baf50e88adbc2f9ea6e5fed43d67a2cb7ad48..894e6b43b852aa9ba91fdfdcb45a0d25f5b49bc8 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -2158,7 +2158,7 @@ static void unmount_device( struct fd *device_fd )
 }
 
 /* default read() routine */
-obj_handle_t no_fd_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos )
+obj_handle_t no_fd_read( struct fd *fd, struct async *async, file_pos_t pos )
 {
     set_error( STATUS_OBJECT_TYPE_MISMATCH );
     return 0;
@@ -2455,7 +2455,7 @@ DECL_HANDLER(read)
         async = create_async( current, &req->async, iosb );
         if (async)
         {
-            reply->wait    = fd->fd_ops->read( fd, async, req->blocking, req->pos );
+            reply->wait    = fd->fd_ops->read( fd, async, req->pos );
             reply->options = fd->options;
             release_object( async );
         }
diff --git a/server/file.h b/server/file.h
index 25b411b5358b4de93732474a2c32a9e9e7757808..a08224e2cdc1254c3497daa05c0d2f188fd09912 100644
--- a/server/file.h
+++ b/server/file.h
@@ -52,7 +52,7 @@ struct fd_ops
     /* get file information */
     enum server_fd_type (*get_fd_type)(struct fd *fd);
     /* perform a read on the file */
-    obj_handle_t (*read)(struct fd *, struct async *, int, file_pos_t );
+    obj_handle_t (*read)(struct fd *, struct async *, file_pos_t );
     /* perform a write on the file */
     obj_handle_t (*write)(struct fd *, struct async *, int, file_pos_t );
     /* flush the object buffers */
@@ -100,7 +100,7 @@ extern void default_poll_event( struct fd *fd, int event );
 extern int fd_queue_async( struct fd *fd, struct async *async, int type );
 extern void fd_async_wake_up( struct fd *fd, int type, unsigned int status );
 extern void fd_reselect_async( struct fd *fd, struct async_queue *queue );
-extern obj_handle_t no_fd_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos );
+extern obj_handle_t no_fd_read( struct fd *fd, struct async *async, file_pos_t pos );
 extern obj_handle_t no_fd_write( struct fd *fd, struct async *async, int blocking, file_pos_t pos );
 extern obj_handle_t no_fd_flush( struct fd *fd, struct async *async, int blocking );
 extern obj_handle_t no_fd_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 44c71fca3bc858f0ac312462a1a49ac53b4ce8fa..3d96c962ab12c2dff1ff3602a99a426f34ce24e6 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -153,7 +153,7 @@ static const struct object_ops named_pipe_ops =
 };
 
 /* common server and client pipe end functions */
-static obj_handle_t pipe_end_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos );
+static obj_handle_t pipe_end_read( struct fd *fd, struct async *async, file_pos_t pos );
 static obj_handle_t pipe_end_write( struct fd *fd, struct async *async_data, int blocking, file_pos_t pos );
 static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count );
 static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue );
@@ -811,12 +811,12 @@ static void reselect_write_queue( struct pipe_end *pipe_end )
     reselect_read_queue( reader );
 }
 
-static obj_handle_t pipe_end_read( struct fd *fd, struct async *async, int blocking, file_pos_t pos )
+static obj_handle_t pipe_end_read( struct fd *fd, struct async *async, file_pos_t pos )
 {
     struct pipe_end *pipe_end = get_fd_user( fd );
     obj_handle_t handle = 0;
 
-    if (!use_server_io( pipe_end )) return no_fd_read( fd, async, blocking, pos );
+    if (!use_server_io( pipe_end )) return no_fd_read( fd, async, pos );
 
     if (!pipe_end->connection && list_empty( &pipe_end->message_queue ))
     {
@@ -831,7 +831,7 @@ static obj_handle_t pipe_end_read( struct fd *fd, struct async *async, int block
     reselect_read_queue( pipe_end );
     set_error( STATUS_PENDING );
 
-    if (!blocking)
+    if (!async_is_blocking( async ))
     {
         struct iosb *iosb;
         iosb = async_get_iosb( async );