diff options
author | majianpeng <majianpeng@gmail.com> | 2013-06-25 23:15:27 -0400 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-07-03 18:32:54 -0400 |
commit | 93faca6ef45822b0825bb181859b1a8911e9c4c1 (patch) | |
tree | 094ad6d3b5223b1cadd57c69364edd5cbe2ebaf2 /fs/ceph/caps.c | |
parent | fb3101b6f0db9ae3f35dc8e6ec908d0af8cdf12e (diff) |
ceph: Reconstruct the func ceph_reserve_caps.
Drop ignored return value. Fix allocation failure case to not leak.
Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
Reviewed-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'fs/ceph/caps.c')
-rw-r--r-- | fs/ceph/caps.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index 9a5ccc9e0d62..8ec27b130cc9 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
@@ -147,7 +147,7 @@ void ceph_adjust_min_caps(struct ceph_mds_client *mdsc, int delta) | |||
147 | spin_unlock(&mdsc->caps_list_lock); | 147 | spin_unlock(&mdsc->caps_list_lock); |
148 | } | 148 | } |
149 | 149 | ||
150 | int ceph_reserve_caps(struct ceph_mds_client *mdsc, | 150 | void ceph_reserve_caps(struct ceph_mds_client *mdsc, |
151 | struct ceph_cap_reservation *ctx, int need) | 151 | struct ceph_cap_reservation *ctx, int need) |
152 | { | 152 | { |
153 | int i; | 153 | int i; |
@@ -155,7 +155,6 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc, | |||
155 | int have; | 155 | int have; |
156 | int alloc = 0; | 156 | int alloc = 0; |
157 | LIST_HEAD(newcaps); | 157 | LIST_HEAD(newcaps); |
158 | int ret = 0; | ||
159 | 158 | ||
160 | dout("reserve caps ctx=%p need=%d\n", ctx, need); | 159 | dout("reserve caps ctx=%p need=%d\n", ctx, need); |
161 | 160 | ||
@@ -174,14 +173,15 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc, | |||
174 | 173 | ||
175 | for (i = have; i < need; i++) { | 174 | for (i = have; i < need; i++) { |
176 | cap = kmem_cache_alloc(ceph_cap_cachep, GFP_NOFS); | 175 | cap = kmem_cache_alloc(ceph_cap_cachep, GFP_NOFS); |
177 | if (!cap) { | 176 | if (!cap) |
178 | ret = -ENOMEM; | 177 | break; |
179 | goto out_alloc_count; | ||
180 | } | ||
181 | list_add(&cap->caps_item, &newcaps); | 178 | list_add(&cap->caps_item, &newcaps); |
182 | alloc++; | 179 | alloc++; |
183 | } | 180 | } |
184 | BUG_ON(have + alloc != need); | 181 | /* we didn't manage to reserve as much as we needed */ |
182 | if (have + alloc != need) | ||
183 | pr_warn("reserve caps ctx=%p ENOMEM need=%d got=%d\n", | ||
184 | ctx, need, have + alloc); | ||
185 | 185 | ||
186 | spin_lock(&mdsc->caps_list_lock); | 186 | spin_lock(&mdsc->caps_list_lock); |
187 | mdsc->caps_total_count += alloc; | 187 | mdsc->caps_total_count += alloc; |
@@ -197,13 +197,6 @@ int ceph_reserve_caps(struct ceph_mds_client *mdsc, | |||
197 | dout("reserve caps ctx=%p %d = %d used + %d resv + %d avail\n", | 197 | dout("reserve caps ctx=%p %d = %d used + %d resv + %d avail\n", |
198 | ctx, mdsc->caps_total_count, mdsc->caps_use_count, | 198 | ctx, mdsc->caps_total_count, mdsc->caps_use_count, |
199 | mdsc->caps_reserve_count, mdsc->caps_avail_count); | 199 | mdsc->caps_reserve_count, mdsc->caps_avail_count); |
200 | return 0; | ||
201 | |||
202 | out_alloc_count: | ||
203 | /* we didn't manage to reserve as much as we needed */ | ||
204 | pr_warning("reserve caps ctx=%p ENOMEM need=%d got=%d\n", | ||
205 | ctx, need, have); | ||
206 | return ret; | ||
207 | } | 200 | } |
208 | 201 | ||
209 | int ceph_unreserve_caps(struct ceph_mds_client *mdsc, | 202 | int ceph_unreserve_caps(struct ceph_mds_client *mdsc, |