Lines Matching defs:bmsafemap

610 SOFTDEP_TYPE(BMSAFEMAP, bmsafemap,
728 static int handle_written_bmsafemap(struct bmsafemap *, struct buf *, int);
762 static void initiate_write_bmsafemap(struct bmsafemap *, struct buf *);
853 struct bmsafemap **);
854 static struct bmsafemap *bmsafemap_lookup(struct mount *, struct buf *,
855 int cg, struct bmsafemap *);
914 static int bmsafemap_backgroundwrite(struct bmsafemap *, struct buf *);
2180 * 4) bmsafemap structures identified by mount point and
2193 * an existing entry is not found. The bmsafemap lookup routine always
4041 * bmsafemap dependency and attempt to remove the jaddref from the bmsafemap.
4099 * is placed in the bmsafemap to await notification of a written bitmap. If
4107 struct bmsafemap *bmsafemap;
4123 * Add the written block to the bmsafemap so it can
4129 bmsafemap = newblk->nb_bmsafemap;
4131 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk,
4532 * to move into the bmsafemap dep. This might be better expressed
4565 * the disk. The jaddref dependency is kept linked into the bmsafemap
5236 struct bmsafemap *bmsafemap;
5262 * We have to preallocate a bmsafemap entry in case it is needed
5273 bmsafemap = malloc(sizeof(struct bmsafemap),
5275 workitem_alloc(&bmsafemap->sm_list, D_BMSAFEMAP, mp);
5280 bmsafemap = bmsafemap_lookup(mp, bp, ino_to_cg(fs, newinum), bmsafemap);
5282 LIST_INSERT_HEAD(&bmsafemap->sm_jaddrefhd, jaddref, ja_bmdeps);
5287 LIST_INSERT_HEAD(&bmsafemap->sm_inodedephd, inodedep, id_deps);
5289 inodedep->id_bmsafemap = bmsafemap;
5307 struct bmsafemap *bmsafemap;
5361 newblk->nb_bmsafemap = bmsafemap = bmsafemap_lookup(mp, bp,
5365 LIST_INSERT_HEAD(&bmsafemap->sm_jnewblkhd, jnewblk, jn_deps);
5368 LIST_INSERT_HEAD(&bmsafemap->sm_newblkhd, newblk, nb_deps);
5370 newblk->nb_bmsafemap = bmsafemap;
5382 struct bmsafemap **bmsafemapp)
5384 struct bmsafemap *bmsafemap;
5386 LIST_FOREACH(bmsafemap, bmsafemaphd, sm_hash)
5387 if (bmsafemap->sm_cg == cg)
5389 if (bmsafemap) {
5390 *bmsafemapp = bmsafemap;
5399 * Find the bmsafemap associated with a cylinder group buffer.
5403 * allocating a new bmsafemap, a preallocated bmsafemap may be
5406 static struct bmsafemap *
5410 struct bmsafemap *newbmsafemap)
5413 struct bmsafemap *bmsafemap, *collision;
5428 if (bmsafemap_find(bmsafemaphd, cg, &bmsafemap) == 1) {
5431 return (bmsafemap);
5434 bmsafemap = newbmsafemap;
5437 bmsafemap = malloc(sizeof(struct bmsafemap),
5439 workitem_alloc(&bmsafemap->sm_list, D_BMSAFEMAP, mp);
5442 bmsafemap->sm_buf = bp;
5443 LIST_INIT(&bmsafemap->sm_inodedephd);
5444 LIST_INIT(&bmsafemap->sm_inodedepwr);
5445 LIST_INIT(&bmsafemap->sm_newblkhd);
5446 LIST_INIT(&bmsafemap->sm_newblkwr);
5447 LIST_INIT(&bmsafemap->sm_jaddrefhd);
5448 LIST_INIT(&bmsafemap->sm_jnewblkhd);
5449 LIST_INIT(&bmsafemap->sm_freehd);
5450 LIST_INIT(&bmsafemap->sm_freewr);
5452 WORKITEM_FREE(bmsafemap, D_BMSAFEMAP);
5455 bmsafemap->sm_cg = cg;
5456 LIST_INSERT_HEAD(bmsafemaphd, bmsafemap, sm_hash);
5457 LIST_INSERT_HEAD(&ump->softdep_dirtycg, bmsafemap, sm_next);
5458 WORKLIST_INSERT(&bp->b_dep, &bmsafemap->sm_list);
5459 return (bmsafemap);
10991 struct bmsafemap *bmsafemap;
11014 /* Lookup the bmsafemap so we track when it is dirty. */
11016 bmsafemap = bmsafemap_lookup(mp, bp, dtog(fs, blkno), NULL);
11029 WORKLIST_INSERT(&bmsafemap->sm_freehd, wk);
11069 bmsafemap = bmsafemap_lookup(mp, bp, dtog(fs, blkno), NULL);
11071 LIST_FOREACH(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps) {
11162 struct bmsafemap *bmsafemap,
11177 if (bmsafemap->sm_state & IOSTARTED)
11179 bmsafemap->sm_state |= IOSTARTED;
11183 if (LIST_FIRST(&bmsafemap->sm_jaddrefhd) != NULL) {
11185 fs = VFSTOUFS(bmsafemap->sm_list.wk_mp)->um_fs;
11187 LIST_FOREACH(jaddref, &bmsafemap->sm_jaddrefhd, ja_bmdeps) {
11205 if (LIST_FIRST(&bmsafemap->sm_jnewblkhd) != NULL) {
11207 fs = VFSTOUFS(bmsafemap->sm_list.wk_mp)->um_fs;
11209 LIST_FOREACH(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps) {
11220 LIST_SWAP(&bmsafemap->sm_inodedephd, &bmsafemap->sm_inodedepwr,
11222 LIST_SWAP(&bmsafemap->sm_newblkhd, &bmsafemap->sm_newblkwr,
11224 LIST_SWAP(&bmsafemap->sm_freehd, &bmsafemap->sm_freewr, worklist,
12049 * Returns true if the bmsafemap will have rollbacks when written. Must only
12054 struct bmsafemap *bmsafemap,
12059 LOCK_OWNED(VFSTOUFS(bmsafemap->sm_list.wk_mp));
12060 dirty = !LIST_EMPTY(&bmsafemap->sm_jaddrefhd) |
12061 !LIST_EMPTY(&bmsafemap->sm_jnewblkhd);
12069 initiate_write_bmsafemap(bmsafemap, bp);
12127 * Complete a write to a bmsafemap structure. Roll forward any bitmap
12137 struct bmsafemap *bmsafemap,
12154 if ((bmsafemap->sm_state & IOSTARTED) == 0)
12156 ump = VFSTOUFS(bmsafemap->sm_list.wk_mp);
12158 bmsafemap->sm_state &= ~IOSTARTED;
12165 handle_jwork(&bmsafemap->sm_freewr);
12167 LIST_CONCAT(&bmsafemap->sm_freehd, &bmsafemap->sm_freewr,
12173 if (!LIST_EMPTY(&bmsafemap->sm_jaddrefhd)) {
12175 fs = VFSTOUFS(bmsafemap->sm_list.wk_mp)->um_fs;
12177 LIST_FOREACH_SAFE(jaddref, &bmsafemap->sm_jaddrefhd,
12201 if (LIST_FIRST(&bmsafemap->sm_jnewblkhd) != NULL) {
12203 fs = VFSTOUFS(bmsafemap->sm_list.wk_mp)->um_fs;
12205 LIST_FOREACH_SAFE(jnewblk, &bmsafemap->sm_jnewblkhd, jn_deps,
12224 LIST_CONCAT(&bmsafemap->sm_newblkhd, &bmsafemap->sm_newblkwr,
12226 LIST_CONCAT(&bmsafemap->sm_freehd, &bmsafemap->sm_freewr,
12232 while ((newblk = LIST_FIRST(&bmsafemap->sm_newblkwr))) {
12247 while ((inodedep = LIST_FIRST(&bmsafemap->sm_inodedepwr)) != NULL) {
12253 LIST_REMOVE(bmsafemap, sm_next);
12254 if (chgs == 0 && LIST_EMPTY(&bmsafemap->sm_jaddrefhd) &&
12255 LIST_EMPTY(&bmsafemap->sm_jnewblkhd) &&
12256 LIST_EMPTY(&bmsafemap->sm_newblkhd) &&
12257 LIST_EMPTY(&bmsafemap->sm_inodedephd) &&
12258 LIST_EMPTY(&bmsafemap->sm_freehd)) {
12259 LIST_REMOVE(bmsafemap, sm_hash);
12260 WORKITEM_FREE(bmsafemap, D_BMSAFEMAP);
12263 LIST_INSERT_HEAD(&ump->softdep_dirtycg, bmsafemap, sm_next);
12869 struct bmsafemap *bmsafemap;
12870 struct bmsafemap *sentinel;
12881 for (bmsafemap = LIST_NEXT(sentinel, sm_next); bmsafemap != NULL;
12882 bmsafemap = LIST_NEXT(sentinel, sm_next)) {
12884 if (bmsafemap->sm_cg == -1 ||
12885 (LIST_EMPTY(&bmsafemap->sm_freehd) &&
12886 LIST_EMPTY(&bmsafemap->sm_freewr))) {
12888 LIST_INSERT_AFTER(bmsafemap, sentinel, sm_next);
12895 bp = getdirtybuf(bmsafemap->sm_buf, LOCK_PTR(ump), waitfor);
12899 LIST_INSERT_AFTER(bmsafemap, sentinel, sm_next);
14328 struct bmsafemap *bmsafemap;
14415 bmsafemap = WK_BMSAFEMAP(wk);
14416 if (LIST_FIRST(&bmsafemap->sm_jaddrefhd)) {
14422 if (LIST_FIRST(&bmsafemap->sm_jnewblkhd)) {
14817 db_printf(" bmsafemap %p, mkdiradd %p, inoreflst %p\n",
14845 db_printf(" jnewblk %p, bmsafemap %p, freefrag %p\n",