aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/xen-blkback/blkback.c13
-rw-r--r--drivers/block/xen-blkback/common.h7
2 files changed, 7 insertions, 13 deletions
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index 9eae7b243f68..fd1e19f1a49f 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -255,8 +255,7 @@ static int add_persistent_gnt(struct xen_blkif_ring *ring,
255 } 255 }
256 } 256 }
257 257
258 bitmap_zero(persistent_gnt->flags, PERSISTENT_GNT_FLAGS_SIZE); 258 persistent_gnt->active = true;
259 set_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags);
260 /* Add new node and rebalance tree. */ 259 /* Add new node and rebalance tree. */
261 rb_link_node(&(persistent_gnt->node), parent, new); 260 rb_link_node(&(persistent_gnt->node), parent, new);
262 rb_insert_color(&(persistent_gnt->node), &ring->persistent_gnts); 261 rb_insert_color(&(persistent_gnt->node), &ring->persistent_gnts);
@@ -280,11 +279,11 @@ static struct persistent_gnt *get_persistent_gnt(struct xen_blkif_ring *ring,
280 else if (gref > data->gnt) 279 else if (gref > data->gnt)
281 node = node->rb_right; 280 node = node->rb_right;
282 else { 281 else {
283 if(test_bit(PERSISTENT_GNT_ACTIVE, data->flags)) { 282 if (data->active) {
284 pr_alert_ratelimited("requesting a grant already in use\n"); 283 pr_alert_ratelimited("requesting a grant already in use\n");
285 return NULL; 284 return NULL;
286 } 285 }
287 set_bit(PERSISTENT_GNT_ACTIVE, data->flags); 286 data->active = true;
288 atomic_inc(&ring->persistent_gnt_in_use); 287 atomic_inc(&ring->persistent_gnt_in_use);
289 return data; 288 return data;
290 } 289 }
@@ -295,10 +294,10 @@ static struct persistent_gnt *get_persistent_gnt(struct xen_blkif_ring *ring,
295static void put_persistent_gnt(struct xen_blkif_ring *ring, 294static void put_persistent_gnt(struct xen_blkif_ring *ring,
296 struct persistent_gnt *persistent_gnt) 295 struct persistent_gnt *persistent_gnt)
297{ 296{
298 if(!test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) 297 if (!persistent_gnt->active)
299 pr_alert_ratelimited("freeing a grant already unused\n"); 298 pr_alert_ratelimited("freeing a grant already unused\n");
300 persistent_gnt->last_used = jiffies; 299 persistent_gnt->last_used = jiffies;
301 clear_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags); 300 persistent_gnt->active = false;
302 atomic_dec(&ring->persistent_gnt_in_use); 301 atomic_dec(&ring->persistent_gnt_in_use);
303} 302}
304 303
@@ -429,7 +428,7 @@ purge_list:
429 BUG_ON(persistent_gnt->handle == 428 BUG_ON(persistent_gnt->handle ==
430 BLKBACK_INVALID_HANDLE); 429 BLKBACK_INVALID_HANDLE);
431 430
432 if (test_bit(PERSISTENT_GNT_ACTIVE, persistent_gnt->flags)) 431 if (persistent_gnt->active)
433 continue; 432 continue;
434 if (!scan_used && !persistent_gnt_timeout(persistent_gnt)) 433 if (!scan_used && !persistent_gnt_timeout(persistent_gnt))
435 continue; 434 continue;
diff --git a/drivers/block/xen-blkback/common.h b/drivers/block/xen-blkback/common.h
index 7bff72db3b7e..2339b8d39c5e 100644
--- a/drivers/block/xen-blkback/common.h
+++ b/drivers/block/xen-blkback/common.h
@@ -233,11 +233,6 @@ struct xen_vbd {
233 233
234struct backend_info; 234struct backend_info;
235 235
236/* Number of available flags */
237#define PERSISTENT_GNT_FLAGS_SIZE 1
238/* This persistent grant is currently in use */
239#define PERSISTENT_GNT_ACTIVE 0
240
241/* Number of requests that we can fit in a ring */ 236/* Number of requests that we can fit in a ring */
242#define XEN_BLKIF_REQS_PER_PAGE 32 237#define XEN_BLKIF_REQS_PER_PAGE 32
243 238
@@ -246,7 +241,7 @@ struct persistent_gnt {
246 grant_ref_t gnt; 241 grant_ref_t gnt;
247 grant_handle_t handle; 242 grant_handle_t handle;
248 unsigned long last_used; 243 unsigned long last_used;
249 DECLARE_BITMAP(flags, PERSISTENT_GNT_FLAGS_SIZE); 244 bool active;
250 struct rb_node node; 245 struct rb_node node;
251 struct list_head remove_node; 246 struct list_head remove_node;
252}; 247};