Author: jhb
Date: Fri May 20 19:46:25 2016
New Revision: 300331
URL: https://svnweb.freebsd.org/changeset/base/300331

Log:
  Consistently set status to -1 when completing an AIO request with an error.
  
  Sponsored by: Chelsio Communications

Modified:
  head/sys/kern/sys_socket.c
  head/sys/kern/vfs_aio.c

Modified: head/sys/kern/sys_socket.c
==============================================================================
--- head/sys/kern/sys_socket.c  Fri May 20 19:38:01 2016        (r300330)
+++ head/sys/kern/sys_socket.c  Fri May 20 19:46:25 2016        (r300331)
@@ -605,7 +605,6 @@ retry:
        cnt -= uio.uio_resid;
        td->td_ucred = td_savedcred;
 
-       /* XXX: Not sure if this is needed? */
        if (cnt != 0 && (error == ERESTART || error == EINTR ||
            error == EWOULDBLOCK))
                error = 0;
@@ -633,7 +632,10 @@ retry:
                        TAILQ_INSERT_HEAD(&sb->sb_aiojobq, job, list);
                }
        } else {
-               aio_complete(job, cnt, error);
+               if (error)
+                       aio_complete(job, -1, error);
+               else
+                       aio_complete(job, cnt, 0);
                SOCKBUF_LOCK(sb);
        }
 }

Modified: head/sys/kern/vfs_aio.c
==============================================================================
--- head/sys/kern/vfs_aio.c     Fri May 20 19:38:01 2016        (r300330)
+++ head/sys/kern/vfs_aio.c     Fri May 20 19:46:25 2016        (r300331)
@@ -806,7 +806,10 @@ aio_process_rw(struct kaiocb *job)
 
        cnt -= auio.uio_resid;
        td->td_ucred = td_savedcred;
-       aio_complete(job, cnt, error);
+       if (error)
+               aio_complete(job, -1, error);
+       else
+               aio_complete(job, cnt, 0);
 }
 
 static void
@@ -824,7 +827,10 @@ aio_process_sync(struct kaiocb *job)
        if (fp->f_vnode != NULL)
                error = aio_fsync_vnode(td, fp->f_vnode);
        td->td_ucred = td_savedcred;
-       aio_complete(job, 0, error);
+       if (error)
+               aio_complete(job, -1, error);
+       else
+               aio_complete(job, 0, 0);
 }
 
 static void
@@ -839,7 +845,10 @@ aio_process_mlock(struct kaiocb *job)
        aio_switch_vmspace(job);
        error = vm_mlock(job->userproc, job->cred,
            __DEVOLATILE(void *, cb->aio_buf), cb->aio_nbytes);
-       aio_complete(job, 0, error);
+       if (error)
+               aio_complete(job, -1, error);
+       else
+               aio_complete(job, 0, 0);
 }
 
 static void
@@ -2323,7 +2332,10 @@ aio_physwakeup(struct bio *bp)
        else
                job->inputcharge += nblks;
 
-       aio_complete(job, nbytes, error);
+       if (error)
+               aio_complete(job, -1, error);
+       else
+               aio_complete(job, nbytes, 0);
 
        g_destroy_bio(bp);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to