Lines Matching defs:chmp
43 #define EB_ADDRESS(x) ( rounddown((x), chmp->chm_ebh->eb_size) )
45 #define PAGE_DIV(x) ( rounddown((x), chmp->chm_wbuf_pagesize) )
46 #define PAGE_MOD(x) ( (x) % (chmp->chm_wbuf_pagesize) )
59 chfs_flush_wbuf(struct chfs_mount *chmp, int pad)
66 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
67 KASSERT(mutex_owned(&chmp->chm_lock_sizes));
68 KASSERT(rw_write_held(&chmp->chm_lock_wbuf));
73 chmp->chm_wbuf_len = PAD(chmp->chm_wbuf_len);
74 memset(chmp->chm_wbuf + chmp->chm_wbuf_len, 0,
75 chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len);
78 padnode = (void *)(chmp->chm_wbuf + chmp->chm_wbuf_len);
81 padnode->length = htole32(chmp->chm_wbuf_pagesize
82 - chmp->chm_wbuf_len);
86 nref = chfs_alloc_node_ref(chmp->chm_nextblock);
87 nref->nref_offset = chmp->chm_wbuf_ofs + chmp->chm_wbuf_len;
90 chmp->chm_wbuf_len = chmp->chm_wbuf_pagesize;
93 chfs_change_size_free(chmp, chmp->chm_nextblock,
95 chfs_change_size_wasted(chmp, chmp->chm_nextblock,
100 ret = chfs_write_leb(chmp, chmp->chm_nextblock->lnr, chmp->chm_wbuf,
101 chmp->chm_wbuf_ofs, chmp->chm_wbuf_len, &retlen);
107 memset(chmp->chm_wbuf, 0xff, chmp->chm_wbuf_pagesize);
108 chmp->chm_wbuf_ofs += chmp->chm_wbuf_pagesize;
109 chmp->chm_wbuf_len = 0;
120 chfs_fill_wbuf(struct chfs_mount *chmp, const u_char *buf, size_t len)
123 if (len && !chmp->chm_wbuf_len && (len >= chmp->chm_wbuf_pagesize)) {
127 if (len > (chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len)) {
128 len = chmp->chm_wbuf_pagesize - chmp->chm_wbuf_len;
131 memcpy(chmp->chm_wbuf + chmp->chm_wbuf_len, buf, len);
134 chmp->chm_wbuf_len += (int) len;
143 chfs_write_wbuf(struct chfs_mount* chmp, const struct iovec *invecs, long count,
150 int lnr = chmp->chm_nextblock->lnr;
152 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
153 KASSERT(mutex_owned(&chmp->chm_lock_sizes));
154 KASSERT(!rw_write_held(&chmp->chm_lock_wbuf));
156 rw_enter(&chmp->chm_lock_wbuf, RW_WRITER);
158 if (chmp->chm_wbuf_ofs == 0xffffffff) {
159 chmp->chm_wbuf_ofs = PAGE_DIV(to);
160 chmp->chm_wbuf_len = PAGE_MOD(to);
161 memset(chmp->chm_wbuf, 0xff, chmp->chm_wbuf_pagesize);
164 if (EB_ADDRESS(to) != EB_ADDRESS(chmp->chm_wbuf_ofs)) {
165 if (chmp->chm_wbuf_len) {
166 ret = chfs_flush_wbuf(chmp, WBUF_SETPAD);
170 chmp->chm_wbuf_ofs = PAGE_DIV(to);
171 chmp->chm_wbuf_len = PAGE_MOD(to);
174 if (to != PAD(chmp->chm_wbuf_ofs + chmp->chm_wbuf_len)) {
176 PAD(chmp->chm_wbuf_ofs + chmp->chm_wbuf_len));
182 if (chmp->chm_wbuf_len != PAGE_MOD(to)) {
183 chmp->chm_wbuf_len = PAGE_MOD(to);
185 if (!chmp->chm_wbuf_len) {
186 chmp->chm_wbuf_len += chmp->chm_wbuf_pagesize;
187 ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
198 wbuf_retlen = chfs_fill_wbuf(chmp, v, vlen);
199 if (chmp->chm_wbuf_len == chmp->chm_wbuf_pagesize) {
200 ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
213 if (vlen >= chmp->chm_wbuf_pagesize) {
214 ret = chfs_write_leb(chmp, lnr, v, outvec_to, PAGE_DIV(vlen), &wbuf_retlen);
217 chmp->chm_wbuf_ofs = outvec_to;
223 wbuf_retlen = chfs_fill_wbuf(chmp, v, vlen);
224 if (chmp->chm_wbuf_len == chmp->chm_wbuf_pagesize) {
225 ret = chfs_flush_wbuf(chmp, WBUF_NOPAD);
234 rw_exit(&chmp->chm_lock_wbuf);
247 int chfs_flush_pending_wbuf(struct chfs_mount *chmp)
250 KASSERT(mutex_owned(&chmp->chm_lock_mountfields));
251 mutex_enter(&chmp->chm_lock_sizes);
252 rw_enter(&chmp->chm_lock_wbuf, RW_WRITER);
253 err = chfs_flush_wbuf(chmp, WBUF_SETPAD);
254 rw_exit(&chmp->chm_lock_wbuf);
255 mutex_exit(&chmp->chm_lock_sizes);