diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer.h b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
index 34b1b77..97b6874 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer.h
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
@@ -135,6 +135,7 @@ struct pb_vtbl
                             struct pb_buffer **base_buf,
                             pb_size *offset );
    
+   bool (*busy)(struct pb_buffer *buf);
 };
 
 
@@ -210,6 +211,15 @@ pb_validate(struct pb_buffer *buf, struct pb_validate *vl, unsigned flags)
    return buf->vtbl->validate(buf, vl, flags);
 }
 
+static INLINE bool
+pb_busy(struct pb_buffer *buf)
+{
+    if (!buf)
+	return FALSE;
+    if (!buf->vtbl->busy)
+	return FALSE;
+    return buf->vtbl->busy(buf);
+}
 
 static INLINE void 
 pb_fence(struct pb_buffer *buf, struct pipe_fence_handle *fence)
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
index 86f9266..610c37c 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
@@ -218,7 +218,8 @@ pb_cache_buffer_vtbl = {
       pb_cache_buffer_unmap,
       pb_cache_buffer_validate,
       pb_cache_buffer_fence,
-      pb_cache_buffer_get_base_buffer
+      pb_cache_buffer_get_base_buffer,
+      NULL,
 };
 
 
@@ -227,6 +228,9 @@ pb_cache_is_buffer_compat(struct pb_cache_buffer *buf,
                           pb_size size,
                           const struct pb_desc *desc)
 {
+   if (pb_busy(buf->buffer) == TRUE)
+      return FALSE;
+
    if(buf->base.base.size < size)
       return FALSE;
 
