Browse Source

ceph: check return value for start_request in writepages

Since we pass the nofail arg, we should never get an error; BUG if we do.
(And fix the function to not return an error if __map_request fails.)

Signed-off-by: Sage Weil <sage@newdream.net>
Sage Weil 14 years ago
parent
commit
9d6fcb081a
2 changed files with 9 additions and 2 deletions
  1. 2 1
      fs/ceph/addr.c
  2. 7 1
      net/ceph/osd_client.c

+ 2 - 1
fs/ceph/addr.c

@@ -848,7 +848,8 @@ get_more_pages:
 		op->payload_len = cpu_to_le32(len);
 		op->payload_len = cpu_to_le32(len);
 		req->r_request->hdr.data_len = cpu_to_le32(len);
 		req->r_request->hdr.data_len = cpu_to_le32(len);
 
 
-		ceph_osdc_start_request(&fsc->client->osdc, req, true);
+		rc = ceph_osdc_start_request(&fsc->client->osdc, req, true);
+		BUG_ON(rc);
 		req = NULL;
 		req = NULL;
 
 
 		/* continue? */
 		/* continue? */

+ 7 - 1
net/ceph/osd_client.c

@@ -1677,8 +1677,14 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc,
 	 */
 	 */
 	if (req->r_sent == 0) {
 	if (req->r_sent == 0) {
 		rc = __map_request(osdc, req);
 		rc = __map_request(osdc, req);
-		if (rc < 0)
+		if (rc < 0) {
+			if (nofail) {
+				dout("osdc_start_request failed map, "
+				     " will retry %lld\n", req->r_tid);
+				rc = 0;
+			}
 			goto out_unlock;
 			goto out_unlock;
+		}
 		if (req->r_osd == NULL) {
 		if (req->r_osd == NULL) {
 			dout("send_request %p no up osds in pg\n", req);
 			dout("send_request %p no up osds in pg\n", req);
 			ceph_monc_request_next_osdmap(&osdc->client->monc);
 			ceph_monc_request_next_osdmap(&osdc->client->monc);