Module Name: src
Committed By: ahoka
Date: Mon Jan 16 12:28:47 UTC 2012
Modified Files:
src/sys/ufs/chfs: chfs_wbuf.c
Log Message:
use enum instead of macros
add some input validation
cleanup
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/ufs/chfs/chfs_wbuf.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/chfs/chfs_wbuf.c
diff -u src/sys/ufs/chfs/chfs_wbuf.c:1.3 src/sys/ufs/chfs/chfs_wbuf.c:1.4
--- src/sys/ufs/chfs/chfs_wbuf.c:1.3 Mon Jan 16 12:17:55 2012
+++ src/sys/ufs/chfs/chfs_wbuf.c Mon Jan 16 12:28:47 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_wbuf.c,v 1.3 2012/01/16 12:17:55 ahoka Exp $ */
+/* $NetBSD: chfs_wbuf.c,v 1.4 2012/01/16 12:28:47 ahoka Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -45,54 +45,65 @@
#define PAGE_DIV(x) ( rounddown((x), chmp->chm_wbuf_pagesize) )
#define PAGE_MOD(x) ( (x) % (chmp->chm_wbuf_pagesize) )
-#define NOPAD 0
-#define SETPAD 1
+enum {
+ WBUF_NOPAD,
+ WBUF_SETPAD
+};
/**
* chfs_flush_wbuf - write wbuf to the flash
* @chmp: super block info
- * @pad: padding (NOPAD / SETPAD)
+ * @pad: padding (WBUF_NOPAD / WBUF_SETPAD)
* Returns zero in case of success.
*/
static int
chfs_flush_wbuf(struct chfs_mount *chmp, int pad)
{
- int ret=0;
- size_t retlen = 0;
+ int ret;
+ size_t retlen;
+ struct chfs_node_ref *nref;
+ struct chfs_flash_padding_node* padnode;
KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
KASSERT(mutex_owned(&chmp->chm_lock_sizes));
KASSERT(rw_write_held(&chmp->chm_lock_wbuf));
+ KASSERT(pad == WBUF_SETPAD || pad == WBUF_NOPAD);
- if (pad) {
+ if (pad == WBUF_SETPAD) {
chmp->chm_wbuf_len = PAD(chmp->chm_wbuf_len);
- memset(chmp->chm_wbuf + chmp->chm_wbuf_len, 0, chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len);
+ memset(chmp->chm_wbuf + chmp->chm_wbuf_len, 0,
+ chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len);
- struct chfs_flash_padding_node* padnode = (void*)(chmp->chm_wbuf + chmp->chm_wbuf_len);
+ padnode = (void *)(chmp->chm_wbuf + chmp->chm_wbuf_len);
padnode->magic = htole16(CHFS_FS_MAGIC_BITMASK);
padnode->type = htole16(CHFS_NODETYPE_PADDING);
- padnode->length = htole32(chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len);
- padnode->hdr_crc = htole32(crc32(0, (uint8_t *)padnode, sizeof(*padnode)-4));
+ padnode->length = htole32(chmp->chm_wbuf_pagesize
+ - chmp->chm_wbuf_len);
+ padnode->hdr_crc = htole32(crc32(0, (uint8_t *)padnode,
+ sizeof(*padnode)-4));
- struct chfs_node_ref *nref;
nref = chfs_alloc_node_ref(chmp->chm_nextblock);
nref->nref_offset = chmp->chm_wbuf_ofs + chmp->chm_wbuf_len;
nref->nref_offset = CHFS_GET_OFS(nref->nref_offset) |
CHFS_OBSOLETE_NODE_MASK;
chmp->chm_wbuf_len = chmp->chm_wbuf_pagesize;
- chfs_change_size_free(chmp, chmp->chm_nextblock, -padnode->length);
- chfs_change_size_wasted(chmp, chmp->chm_nextblock, padnode->length);
+ chfs_change_size_free(chmp, chmp->chm_nextblock,
+ -padnode->length);
+ chfs_change_size_wasted(chmp, chmp->chm_nextblock,
+ padnode->length);
}
- ret = chfs_write_leb(chmp, chmp->chm_nextblock->lnr, chmp->chm_wbuf, chmp->chm_wbuf_ofs, chmp->chm_wbuf_len, &retlen);
- if(ret) {
+ ret = chfs_write_leb(chmp, chmp->chm_nextblock->lnr, chmp->chm_wbuf,
+ chmp->chm_wbuf_ofs, chmp->chm_wbuf_len, &retlen);
+ if (ret) {
return ret;
}
- memset(chmp->chm_wbuf,0xff,chmp->chm_wbuf_pagesize);
+ memset(chmp->chm_wbuf, 0xff, chmp->chm_wbuf_pagesize);
chmp->chm_wbuf_ofs += chmp->chm_wbuf_pagesize;
chmp->chm_wbuf_len = 0;
+
return 0;
}
@@ -156,7 +167,7 @@ chfs_write_wbuf(struct chfs_mount* chmp,
if (EB_ADDRESS(to) != EB_ADDRESS(chmp->chm_wbuf_ofs)) {
if (chmp->chm_wbuf_len) {
- ret = chfs_flush_wbuf(chmp, SETPAD);
+ ret = chfs_flush_wbuf(chmp, WBUF_SETPAD);
if (ret)
goto outerr;
}
@@ -179,7 +190,7 @@ chfs_write_wbuf(struct chfs_mount* chmp,
/* take care of alignement to next page*/
if (!chmp->chm_wbuf_len) {
chmp->chm_wbuf_len += chmp->chm_wbuf_pagesize;
- ret = chfs_flush_wbuf(chmp, NOPAD);
+ ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
if (ret)
goto outerr;
}
@@ -193,7 +204,7 @@ chfs_write_wbuf(struct chfs_mount* chmp,
wbuf_retlen = chfs_fill_wbuf(chmp, v, vlen);
if (chmp->chm_wbuf_len == chmp->chm_wbuf_pagesize) {
- ret = chfs_flush_wbuf(chmp, NOPAD);
+ ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
if (ret) {
goto outerr;
}
@@ -213,14 +224,14 @@ chfs_write_wbuf(struct chfs_mount* chmp,
}
wbuf_retlen = chfs_fill_wbuf(chmp, v, vlen);
if (chmp->chm_wbuf_len == chmp->chm_wbuf_pagesize) {
- ret = chfs_flush_wbuf(chmp, NOPAD);
+ ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
if (ret)
goto outerr;
}
// if we write the last vector, we flush with padding
/*if (invec == count-1) {
- ret = chfs_flush_wbuf(chmp, SETPAD);
+ ret = chfs_flush_wbuf(chmp, WBUF_SETPAD);
if (ret)
goto outerr;
}*/
@@ -243,7 +254,7 @@ int chfs_flush_pending_wbuf(struct chfs_
KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
mutex_enter(&chmp->chm_lock_sizes);
rw_enter(&chmp->chm_lock_wbuf, RW_WRITER);
- err = chfs_flush_wbuf(chmp, SETPAD);
+ err = chfs_flush_wbuf(chmp, WBUF_SETPAD);
rw_exit(&chmp->chm_lock_wbuf);
mutex_exit(&chmp->chm_lock_sizes);
return err;