diff options
Diffstat (limited to 'fs/ceph/osd_client.c')
-rw-r--r-- | fs/ceph/osd_client.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c index ffd819c5a5dd..3a631f27cc9e 100644 --- a/fs/ceph/osd_client.c +++ b/fs/ceph/osd_client.c | |||
@@ -615,7 +615,6 @@ static int __map_osds(struct ceph_osd_client *osdc, | |||
615 | struct ceph_pg pgid; | 615 | struct ceph_pg pgid; |
616 | int o = -1; | 616 | int o = -1; |
617 | int err; | 617 | int err; |
618 | struct ceph_osd *newosd = NULL; | ||
619 | 618 | ||
620 | dout("map_osds %p tid %lld\n", req, req->r_tid); | 619 | dout("map_osds %p tid %lld\n", req, req->r_tid); |
621 | err = ceph_calc_object_layout(&reqhead->layout, req->r_oid, | 620 | err = ceph_calc_object_layout(&reqhead->layout, req->r_oid, |
@@ -639,25 +638,15 @@ static int __map_osds(struct ceph_osd_client *osdc, | |||
639 | if (req->r_osd) { | 638 | if (req->r_osd) { |
640 | __cancel_request(req); | 639 | __cancel_request(req); |
641 | list_del_init(&req->r_osd_item); | 640 | list_del_init(&req->r_osd_item); |
642 | if (list_empty(&req->r_osd->o_requests)) { | ||
643 | /* try to re-use r_osd if possible */ | ||
644 | newosd = get_osd(req->r_osd); | ||
645 | __remove_osd(osdc, newosd); | ||
646 | } | ||
647 | req->r_osd = NULL; | 641 | req->r_osd = NULL; |
648 | } | 642 | } |
649 | 643 | ||
650 | req->r_osd = __lookup_osd(osdc, o); | 644 | req->r_osd = __lookup_osd(osdc, o); |
651 | if (!req->r_osd && o >= 0) { | 645 | if (!req->r_osd && o >= 0) { |
652 | if (newosd) { | 646 | err = -ENOMEM; |
653 | req->r_osd = newosd; | 647 | req->r_osd = create_osd(osdc); |
654 | newosd = NULL; | 648 | if (!req->r_osd) |
655 | } else { | 649 | goto out; |
656 | err = -ENOMEM; | ||
657 | req->r_osd = create_osd(osdc); | ||
658 | if (!req->r_osd) | ||
659 | goto out; | ||
660 | } | ||
661 | 650 | ||
662 | dout("map_osds osd %p is osd%d\n", req->r_osd, o); | 651 | dout("map_osds osd %p is osd%d\n", req->r_osd, o); |
663 | req->r_osd->o_osd = o; | 652 | req->r_osd->o_osd = o; |
@@ -674,8 +663,6 @@ static int __map_osds(struct ceph_osd_client *osdc, | |||
674 | err = 1; /* osd changed */ | 663 | err = 1; /* osd changed */ |
675 | 664 | ||
676 | out: | 665 | out: |
677 | if (newosd) | ||
678 | put_osd(newosd); | ||
679 | return err; | 666 | return err; |
680 | } | 667 | } |
681 | 668 | ||