libceph: fix socket write error handling

Pass errors from writing to the socket up the stack. If we get -EAGAIN,
return 0 from the helper to simplify the callers' checks.

Signed-off-by: Sage Weil <sage@newdream.net>

Sage Weil 42961d23 98bdb0aa

+12 -11
+12 -11
net/ceph/messenger.c
··· 268 size_t kvlen, size_t len, int more) 269 { 270 struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; 271 272 if (more) 273 msg.msg_flags |= MSG_MORE; 274 else 275 msg.msg_flags |= MSG_EOR; /* superfluous, but what the hell */ 276 277 - return kernel_sendmsg(sock, &msg, iov, kvlen, len); 278 } 279 280 ··· 855 (msg->pages || msg->pagelist || msg->bio || in_trail)) 856 kunmap(page); 857 858 if (ret <= 0) 859 goto out; 860 ··· 1747 if (con->out_skip) { 1748 ret = write_partial_skip(con); 1749 if (ret <= 0) 1750 - goto done; 1751 - if (ret < 0) { 1752 - dout("try_write write_partial_skip err %d\n", ret); 1753 - goto done; 1754 - } 1755 } 1756 if (con->out_kvec_left) { 1757 ret = write_partial_kvec(con); 1758 if (ret <= 0) 1759 - goto done; 1760 } 1761 1762 /* msg pages? */ ··· 1767 if (ret == 1) 1768 goto more_kvec; /* we need to send the footer, too! */ 1769 if (ret == 0) 1770 - goto done; 1771 if (ret < 0) { 1772 dout("try_write write_partial_msg_pages err %d\n", 1773 ret); 1774 - goto done; 1775 } 1776 } 1777 ··· 1795 /* Nothing to do! */ 1796 clear_bit(WRITE_PENDING, &con->state); 1797 dout("try_write nothing else to write.\n"); 1798 - done: 1799 ret = 0; 1800 out: 1801 - dout("try_write done on %p\n", con); 1802 return ret; 1803 } 1804
··· 268 size_t kvlen, size_t len, int more) 269 { 270 struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; 271 + int r; 272 273 if (more) 274 msg.msg_flags |= MSG_MORE; 275 else 276 msg.msg_flags |= MSG_EOR; /* superfluous, but what the hell */ 277 278 + r = kernel_sendmsg(sock, &msg, iov, kvlen, len); 279 + if (r == -EAGAIN) 280 + r = 0; 281 + return r; 282 } 283 284 ··· 851 (msg->pages || msg->pagelist || msg->bio || in_trail)) 852 kunmap(page); 853 854 + if (ret == -EAGAIN) 855 + ret = 0; 856 if (ret <= 0) 857 goto out; 858 ··· 1741 if (con->out_skip) { 1742 ret = write_partial_skip(con); 1743 if (ret <= 0) 1744 + goto out; 1745 } 1746 if (con->out_kvec_left) { 1747 ret = write_partial_kvec(con); 1748 if (ret <= 0) 1749 + goto out; 1750 } 1751 1752 /* msg pages? */ ··· 1765 if (ret == 1) 1766 goto more_kvec; /* we need to send the footer, too! */ 1767 if (ret == 0) 1768 + goto out; 1769 if (ret < 0) { 1770 dout("try_write write_partial_msg_pages err %d\n", 1771 ret); 1772 + goto out; 1773 } 1774 } 1775 ··· 1793 /* Nothing to do! */ 1794 clear_bit(WRITE_PENDING, &con->state); 1795 dout("try_write nothing else to write.\n"); 1796 ret = 0; 1797 out: 1798 + dout("try_write done on %p ret %d\n", con, ret); 1799 return ret; 1800 } 1801