diff options
Diffstat (limited to 'drivers/block/rbd.c')
-rw-r--r-- | drivers/block/rbd.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c index 9d49e5b888d8..2846536d446e 100644 --- a/drivers/block/rbd.c +++ b/drivers/block/rbd.c | |||
@@ -229,7 +229,7 @@ struct rbd_device { | |||
229 | spinlock_t lock; /* queue lock */ | 229 | spinlock_t lock; /* queue lock */ |
230 | 230 | ||
231 | struct rbd_image_header header; | 231 | struct rbd_image_header header; |
232 | bool exists; | 232 | atomic_t exists; |
233 | struct rbd_spec *spec; | 233 | struct rbd_spec *spec; |
234 | 234 | ||
235 | char *header_name; | 235 | char *header_name; |
@@ -751,7 +751,7 @@ static int rbd_dev_set_mapping(struct rbd_device *rbd_dev) | |||
751 | goto done; | 751 | goto done; |
752 | rbd_dev->mapping.read_only = true; | 752 | rbd_dev->mapping.read_only = true; |
753 | } | 753 | } |
754 | rbd_dev->exists = true; | 754 | atomic_set(&rbd_dev->exists, 1); |
755 | done: | 755 | done: |
756 | return ret; | 756 | return ret; |
757 | } | 757 | } |
@@ -1671,7 +1671,7 @@ static void rbd_rq_fn(struct request_queue *q) | |||
1671 | /* Grab a reference to the snapshot context */ | 1671 | /* Grab a reference to the snapshot context */ |
1672 | 1672 | ||
1673 | down_read(&rbd_dev->header_rwsem); | 1673 | down_read(&rbd_dev->header_rwsem); |
1674 | if (rbd_dev->exists) { | 1674 | if (atomic_read(&rbd_dev->exists)) { |
1675 | snapc = ceph_get_snap_context(rbd_dev->header.snapc); | 1675 | snapc = ceph_get_snap_context(rbd_dev->header.snapc); |
1676 | rbd_assert(snapc != NULL); | 1676 | rbd_assert(snapc != NULL); |
1677 | } | 1677 | } |
@@ -2294,6 +2294,7 @@ struct rbd_device *rbd_dev_create(struct rbd_client *rbdc, | |||
2294 | return NULL; | 2294 | return NULL; |
2295 | 2295 | ||
2296 | spin_lock_init(&rbd_dev->lock); | 2296 | spin_lock_init(&rbd_dev->lock); |
2297 | atomic_set(&rbd_dev->exists, 0); | ||
2297 | INIT_LIST_HEAD(&rbd_dev->node); | 2298 | INIT_LIST_HEAD(&rbd_dev->node); |
2298 | INIT_LIST_HEAD(&rbd_dev->snaps); | 2299 | INIT_LIST_HEAD(&rbd_dev->snaps); |
2299 | init_rwsem(&rbd_dev->header_rwsem); | 2300 | init_rwsem(&rbd_dev->header_rwsem); |
@@ -2918,7 +2919,7 @@ static int rbd_dev_snaps_update(struct rbd_device *rbd_dev) | |||
2918 | /* Existing snapshot not in the new snap context */ | 2919 | /* Existing snapshot not in the new snap context */ |
2919 | 2920 | ||
2920 | if (rbd_dev->spec->snap_id == snap->id) | 2921 | if (rbd_dev->spec->snap_id == snap->id) |
2921 | rbd_dev->exists = false; | 2922 | atomic_set(&rbd_dev->exists, 0); |
2922 | rbd_remove_snap_dev(snap); | 2923 | rbd_remove_snap_dev(snap); |
2923 | dout("%ssnap id %llu has been removed\n", | 2924 | dout("%ssnap id %llu has been removed\n", |
2924 | rbd_dev->spec->snap_id == snap->id ? | 2925 | rbd_dev->spec->snap_id == snap->id ? |