HAMMER 18B/many: Stabilization pass
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 11 Jan 2008 05:45:19 +0000 (05:45 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 11 Jan 2008 05:45:19 +0000 (05:45 +0000)
* Fix B_LOCKED buffer leakages by clearing B_LOCKED when a bp is
  disassociated from its related HAMMER structure.

* The sync code can be called with a buffer still referenced from
  other sources, so hammer_flush_buffer_nodes() can't be called.  The
  refactored hammer_node abstraction no longer holds active refs on
  the underlying buffer anyway (unless actively referenced itself), so
  there is no need to flush it to guarentee that the buffer itself gets
  flushed.

sys/vfs/hammer/hammer_io.c
sys/vfs/hammer/hammer_ondisk.c

index b50267e..54d52c6 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/vfs/hammer/hammer_io.c,v 1.15 2008/01/11 01:41:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/hammer/hammer_io.c,v 1.16 2008/01/11 05:45:19 dillon Exp $
  */
 /*
  * IO Primitives and buffer cache management
@@ -73,7 +73,7 @@ hammer_io_init(hammer_io_t io, enum hammer_io_type type)
  * caller is responsible for dealing with the refs.
  *
  * This call can only be made when no action is required on the buffer.
- * HAMMER must own the buffer (released == 0) since mess around with it.
+ * HAMMER must own the buffer (released == 0) since we mess around with it.
  */
 static void
 hammer_io_disassociate(hammer_io_structure_t iou, int elseit)
@@ -83,6 +83,7 @@ hammer_io_disassociate(hammer_io_structure_t iou, int elseit)
        KKASSERT(TAILQ_EMPTY(&iou->io.deplist) && iou->io.modified == 0);
        buf_dep_init(bp);
        iou->io.bp = NULL;
+       bp->b_flags &= ~B_LOCKED;
        if (elseit) {
                KKASSERT(iou->io.released == 0);
                iou->io.released = 1;
index 33304bb..827fcec 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/vfs/hammer/hammer_ondisk.c,v 1.19 2008/01/11 01:41:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/hammer/hammer_ondisk.c,v 1.20 2008/01/11 05:45:19 dillon Exp $
  */
 /*
  * Manage HAMMER's on-disk structures.  These routines are primarily
@@ -2095,12 +2095,8 @@ hammer_sync_cluster(hammer_cluster_t cluster, void *data)
 int
 hammer_sync_buffer(hammer_buffer_t buffer, void *data __unused)
 {
-       if (hammer_ref_buffer(buffer) == 0) {
-               hammer_lock_ex(&buffer->io.lock);
-               hammer_flush_buffer_nodes(buffer);
-               hammer_unlock(&buffer->io.lock);
+       if (hammer_ref_buffer(buffer) == 0)
                hammer_rel_buffer(buffer, 1);
-       }
        return(0);
 }