NFS - Fix panic on umount/reboot
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 18 Jul 2009 15:18:49 +0000 (08:18 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 18 Jul 2009 15:18:49 +0000 (08:18 -0700)
* The rx thread sometimes gets no-error and 0-bytes returned from
  its soreceive call, but the caller expects a mbuf in that case.
  Check for the case and convert to EPIPE.

sys/vfs/nfs/nfs_socket.c

index aa477be..02bfb56 100644 (file)
@@ -712,13 +712,22 @@ errout:
                                return (EINTR);
                        }
                } while (error == EWOULDBLOCK);
+
                len = sio.sb_cc;
                *mp = sio.sb_mb;
+
+               /*
+                * A shutdown may result in no error and no mbuf.
+                * Convert to EPIPE.
+                */
+               if (*mp == NULL && error == 0)
+                       error = EPIPE;
        }
        if (error) {
                m_freem(*mp);
                *mp = NULL;
        }
+
        /*
         * Search for any mbufs that are not a multiple of 4 bytes long
         * or with m_data not longword aligned.