From 3ba7d47d7467780cbf8fe1b24d309b37267818a6 Mon Sep 17 00:00:00 2001 From: tol Date: Thu, 11 Jan 2007 12:14:22 +0000 Subject: [PATCH] (nnpfs_block_open): better cleanup on failure --- nnpfs/bsd/nnpfs_blocks.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/nnpfs/bsd/nnpfs_blocks.c b/nnpfs/bsd/nnpfs_blocks.c index 04d29b1d4..42a989398 100644 --- a/nnpfs/bsd/nnpfs_blocks.c +++ b/nnpfs/bsd/nnpfs_blocks.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2006, Stockholms Universitet + * Copyright (c) 2005-2007, Stockholms Universitet * (Stockholm University, Stockholm Sweden) * All rights reserved. * @@ -354,6 +354,8 @@ nnpfs_block_open(struct nnpfs_node *node, uint64_t offset, int flags, off_t eof = nnpfs_vattr_get_size(&node->attr); int ret; + NNPFSDEB(XDEBNODE, ("nnpfs_block_open\n")); + nnpfs_assert(nnpfsp); nnpfs_assert(nnpfs_block_have_p(node, offset) @@ -369,7 +371,7 @@ nnpfs_block_open(struct nnpfs_node *node, uint64_t offset, int flags, id / 0x100, id % 0x100, (unsigned long long)blockindex); - nnpfs_assert(ret > 0 && ret < sizeof(cachename)); + nnpfs_assert(ret > 0 && ret < sizeof(cachename)); /* XXX */ ret = open_file(cachename, flags, nnpfsp->ctx, vpp); nnpfs_debug_assert(!ret); @@ -377,9 +379,15 @@ nnpfs_block_open(struct nnpfs_node *node, uint64_t offset, int flags, return ret; /* blocks in the middle of the file should be of full length */ - if ((flags & O_CREAT) && offset < nnpfs_offset(eof)) + if ((flags & O_CREAT) && offset < nnpfs_offset(eof)) { ret = nnpfs_block_extend_int(node, *vpp); + nnpfs_debug_assert(!ret); + if (ret) + nnpfs_block_close(*vpp, + ((flags & FWRITE) == FWRITE) ? 1 : 0); + } + NNPFSDEB(XDEBNODE, ("nnpfs_block_open -> %d\n", ret)); return ret; } -- 2.11.4.GIT