Lines Matching refs:jblocks

640 static MALLOC_DEFINE(M_JBLOCKS, "jblocks", "Journal block locations");
798 static void free_jsegs(struct jblocks *);
800 static void free_jseg(struct jseg *, struct jblocks *);
919 static struct jblocks *jblocks_create(void);
920 static ufs2_daddr_t jblocks_alloc(struct jblocks *, int, int *);
921 static void jblocks_free(struct jblocks *, struct mount *, int);
922 static void jblocks_destroy(struct jblocks *);
923 static void jblocks_add(struct jblocks *, ufs2_daddr_t, int);
2496 struct jblocks *jblocks;
2501 jblocks = ump->softdep_jblocks;
2502 jseg = TAILQ_LAST(&jblocks->jb_segs, jseglst);
2770 static struct jblocks *
2773 struct jblocks *jblocks;
2775 jblocks = malloc(sizeof(*jblocks), M_JBLOCKS, M_WAITOK | M_ZERO);
2776 TAILQ_INIT(&jblocks->jb_segs);
2777 jblocks->jb_avail = 10;
2778 jblocks->jb_extent = malloc(sizeof(struct jextent) * jblocks->jb_avail,
2781 return (jblocks);
2785 jblocks_alloc(struct jblocks *jblocks,
2795 jext = &jblocks->jb_extent[jblocks->jb_head];
2796 freecnt = jext->je_blocks - jblocks->jb_off;
2798 jblocks->jb_off = 0;
2799 if (++jblocks->jb_head > jblocks->jb_used)
2800 jblocks->jb_head = 0;
2801 jext = &jblocks->jb_extent[jblocks->jb_head];
2807 daddr = jext->je_daddr + jblocks->jb_off;
2808 jblocks->jb_off += freecnt;
2809 jblocks->jb_free -= freecnt;
2815 jblocks_free(struct jblocks *jblocks,
2821 jblocks->jb_free += bytes / DEV_BSIZE;
2822 if (jblocks->jb_suspended)
2824 wakeup(jblocks);
2828 jblocks_destroy(struct jblocks *jblocks)
2831 if (jblocks->jb_extent)
2832 free(jblocks->jb_extent, M_JBLOCKS);
2833 free(jblocks, M_JBLOCKS);
2837 jblocks_add(struct jblocks *jblocks,
2843 jblocks->jb_blocks += blocks;
2844 jblocks->jb_free += blocks;
2845 jext = &jblocks->jb_extent[jblocks->jb_used];
2858 if (++jblocks->jb_used == jblocks->jb_avail) {
2859 jblocks->jb_avail *= 2;
2860 jext = malloc(sizeof(struct jextent) * jblocks->jb_avail,
2862 memcpy(jext, jblocks->jb_extent,
2863 sizeof(struct jextent) * jblocks->jb_used);
2864 free(jblocks->jb_extent, M_JBLOCKS);
2865 jblocks->jb_extent = jext;
2867 jext = &jblocks->jb_extent[jblocks->jb_used];
2907 struct jblocks *jblocks;
2933 jblocks = jblocks_create();
2938 jblocks_add(jblocks, blkno, fsbtodb(fs, fs->fs_frag));
2941 jblocks_destroy(jblocks);
2944 jblocks->jb_low = jblocks->jb_free / 3; /* Reserve 33%. */
2945 jblocks->jb_min = jblocks->jb_free / 10; /* Suspend at 10%. */
2946 ump->softdep_jblocks = jblocks;
3048 struct jblocks *jblocks;
3051 jblocks = ump->softdep_jblocks;
3052 if (jblocks == NULL)
3065 thresh = jblocks->jb_min;
3067 thresh = jblocks->jb_low;
3069 avail = jblocks->jb_free - avail;
3077 struct jblocks *jblocks;
3085 jblocks = ump->softdep_jblocks;
3095 jblocks->jb_suspended = 1;
3104 struct jblocks *jblocks;
3108 jblocks = ump->softdep_jblocks;
3110 if (jblocks != NULL && jblocks->jb_suspended &&
3111 journal_space(ump, jblocks->jb_min)) {
3112 jblocks->jb_suspended = 0;
3530 struct jblocks *jblocks;
3536 jblocks = ump->softdep_jblocks;
3539 jblocks->jb_needseg = 1;
3617 struct jblocks *jblocks;
3643 jblocks = ump->softdep_jblocks;
3669 jblocks->jb_needseg == 0 && (segwritten || cnt == 0))
3678 while (jblocks->jb_free == 0) {
3683 msleep(jblocks, LOCK_PTR(ump), PRIBIO, "jblocks", hz);
3695 jseg->js_jblocks = jblocks;
3706 if (cnt + jblocks->jb_needseg == 0 || jblocks->jb_free == 0) {
3729 bp->b_blkno = jblocks_alloc(jblocks, size, &size);
3744 jseg->js_seq = jblocks->jb_nextseq++;
3745 if (jblocks->jb_oldestseg == NULL)
3746 jblocks->jb_oldestseg = jseg;
3747 jseg->js_oldseq = jblocks->jb_oldestseg->js_seq;
3748 TAILQ_INSERT_TAIL(&jblocks->jb_segs, jseg, js_next);
3749 if (jblocks->jb_writeseg == NULL)
3750 jblocks->jb_writeseg = jseg;
3832 jblocks->jb_needseg = 0;
3855 TAILQ_LAST(&jblocks->jb_segs, jseglst));
3863 if (flags == 0 && jblocks->jb_suspended) {
3946 struct jblocks *jblocks;
3949 jblocks = jseg->js_jblocks;
3954 if (jseg != jblocks->jb_writeseg)
3958 jblocks->jb_oldestwrseq = jseg->js_oldseq;
3963 jblocks->jb_writeseg = jseg;
3967 free_jsegs(jblocks);
4744 free_jseg(struct jseg *jseg, struct jblocks *jblocks)
4754 if (jblocks->jb_oldestseg == jseg)
4755 jblocks->jb_oldestseg = TAILQ_NEXT(jseg, js_next);
4756 TAILQ_REMOVE(&jblocks->jb_segs, jseg, js_next);
4757 jblocks_free(jblocks, jseg->js_list.wk_mp, jseg->js_size);
4768 free_jsegs(struct jblocks *jblocks)
4776 while ((jseg = TAILQ_FIRST(&jblocks->jb_segs)) != NULL) {
4783 jblocks->jb_oldestseg = jseg;
4788 if (jseg->js_seq > jblocks->jb_oldestwrseq)
4794 if (jseg->js_seq == jblocks->jb_oldestwrseq &&
4797 free_jseg(jseg, jblocks);
4804 for (jseg = jblocks->jb_oldestseg; jseg != NULL;
4808 jblocks->jb_oldestseg = jseg;
4814 if (jblocks->jb_oldestseg == NULL && !TAILQ_EMPTY(&jblocks->jb_segs))
4815 jblocks->jb_needseg = 1;