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;