commit 53b588c7899ecf4f4c969259e2c80f18192893ba
parent ff783e2a9af6d97d55697d654d759ca48d6a28a1
Author: sin <sin@2f30.org>
Date: Sat, 27 Apr 2019 18:31:05 +0100
Add some comments
Diffstat:
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/bstorage.c b/bstorage.c
@@ -84,8 +84,8 @@ struct bhdr {
/* Block descriptor */
struct bd {
uint64_t type;
- uint64_t offset;
- uint64_t size;
+ uint64_t offset; /* offset of block */
+ uint64_t size; /* size of block */
uint64_t refcnt;
unsigned char md[MDSIZE];
RB_ENTRY(bd) rbe;
@@ -359,7 +359,6 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar)
close(fd);
return -1;
}
-
bhdr->nbd = 0;
sctx->fd = fd;
@@ -484,6 +483,7 @@ bsput(struct bctx *bctx, void *buf, size_t n, unsigned char *md)
if (lseek(sctx->fd, bdoffs, SEEK_SET) < 0)
return -1;
+ /* Block already present, increment the reference count */
bd->refcnt++;
if (packbd(sctx->fd, bd) < 0) {
bd->refcnt--;
@@ -583,8 +583,7 @@ bsrm(struct bctx *bctx, unsigned char *md)
if (punchhole(sctx->fd, bd->offset, bd->size) < 0) {
/*
* Filesystem does not support hole punching.
- * Try to recover the block descriptor so we don't
- * lose track of the block.
+ * Restore reference count.
*/
lseek(sctx->fd, bdoffs, SEEK_SET);
bd->refcnt++;
@@ -592,6 +591,11 @@ bsrm(struct bctx *bctx, unsigned char *md)
return -1;
}
+ /*
+ * Remove block from block descriptor cache as this is no
+ * longer a valid block. Insert it into the garbage collector
+ * list instead.
+ */
RB_REMOVE(bdcache, &sctx->bdcache, bd);
SLIST_INSERT_HEAD(&sctx->gchead, bd, sle);
return 0;
@@ -685,6 +689,7 @@ bsclose(struct bctx *bctx)
return -1;
sctx = bctx->sctx;
+
/* Free block descriptor cache */
RB_FOREACH_SAFE(bd, bdcache, &sctx->bdcache, tmp) {
RB_REMOVE(bdcache, &sctx->bdcache, bd);