git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
xen
/
blktap
/
interface.c
diff --git
a/drivers/xen/blktap/interface.c
b/drivers/xen/blktap/interface.c
index
19e0eda
..
3dcc624
100644
(file)
--- a/
drivers/xen/blktap/interface.c
+++ b/
drivers/xen/blktap/interface.c
@@
-34,7
+34,7
@@
#include "common.h"
#include <xen/evtchn.h>
#include "common.h"
#include <xen/evtchn.h>
-static
kmem_cache_t
*blkif_cachep;
+static
struct kmem_cache
*blkif_cachep;
blkif_t *tap_alloc_blkif(domid_t domid)
{
blkif_t *tap_alloc_blkif(domid_t domid)
{
@@
-135,20
+135,25
@@
int tap_blkif_map(blkif_t *blkif, unsigned long shared_page,
return 0;
}
return 0;
}
-void tap_blkif_
free
(blkif_t *blkif)
+void tap_blkif_
unmap
(blkif_t *blkif)
{
{
- atomic_dec(&blkif->refcnt);
- wait_event(blkif->waiting_to_free, atomic_read(&blkif->refcnt) == 0);
-
- /* Already disconnected? */
- if (blkif->irq)
+ if (blkif->irq) {
unbind_from_irqhandler(blkif->irq, blkif);
unbind_from_irqhandler(blkif->irq, blkif);
-
+ blkif->irq = 0;
+ }
if (blkif->blk_ring.sring) {
unmap_frontend_page(blkif);
free_vm_area(blkif->blk_ring_area);
if (blkif->blk_ring.sring) {
unmap_frontend_page(blkif);
free_vm_area(blkif->blk_ring_area);
+ blkif->blk_ring.sring = NULL;
}
}
+}
+
+void tap_blkif_free(blkif_t *blkif)
+{
+ atomic_dec(&blkif->refcnt);
+ wait_event(blkif->waiting_to_free, atomic_read(&blkif->refcnt) == 0);
+ tap_blkif_unmap(blkif);
kmem_cache_free(blkif_cachep, blkif);
}
kmem_cache_free(blkif_cachep, blkif);
}