Lines Matching full:dp
114 struct g_cache_desc *dp; in g_cache_alloc() local
119 dp = TAILQ_FIRST(&sc->sc_usedlist); in g_cache_alloc()
120 TAILQ_REMOVE(&sc->sc_usedlist, dp, d_used); in g_cache_alloc()
122 dp->d_flags = 0; in g_cache_alloc()
123 LIST_REMOVE(dp, d_next); in g_cache_alloc()
124 return (dp); in g_cache_alloc()
130 dp = malloc(sizeof(*dp), M_GCACHE, M_NOWAIT | M_ZERO); in g_cache_alloc()
131 if (dp == NULL) in g_cache_alloc()
133 dp->d_data = uma_zalloc(sc->sc_zone, M_NOWAIT); in g_cache_alloc()
134 if (dp->d_data == NULL) { in g_cache_alloc()
135 free(dp, M_GCACHE); in g_cache_alloc()
139 return (dp); in g_cache_alloc()
143 g_cache_free(struct g_cache_softc *sc, struct g_cache_desc *dp) in g_cache_free() argument
148 uma_zfree(sc->sc_zone, dp->d_data); in g_cache_free()
149 free(dp, M_GCACHE); in g_cache_free()
156 struct g_cache_desc *dp; in g_cache_free_used() local
164 dp = TAILQ_FIRST(&sc->sc_usedlist); in g_cache_free_used()
165 TAILQ_REMOVE(&sc->sc_usedlist, dp, d_used); in g_cache_free_used()
167 LIST_REMOVE(dp, d_next); in g_cache_free_used()
168 g_cache_free(sc, dp); in g_cache_free_used()
174 struct g_cache_desc *dp, int error) in g_cache_deliver() argument
179 KASSERT(OFF2BNO(bp->bio_offset, sc) <= dp->d_bno, ("wrong entry")); in g_cache_deliver()
181 dp->d_bno, ("wrong entry")); in g_cache_deliver()
183 off1 = BNO2OFF(dp->d_bno, sc); in g_cache_deliver()
190 bcopy(dp->d_data + (off - off1), in g_cache_deliver()
201 if (dp->d_flags & D_FLAG_USED) { in g_cache_deliver()
202 TAILQ_REMOVE(&sc->sc_usedlist, dp, d_used); in g_cache_deliver()
203 TAILQ_INSERT_TAIL(&sc->sc_usedlist, dp, d_used); in g_cache_deliver()
204 } else if (OFF2BNO(off + len, sc) > dp->d_bno) { in g_cache_deliver()
205 TAILQ_INSERT_TAIL(&sc->sc_usedlist, dp, d_used); in g_cache_deliver()
207 dp->d_flags |= D_FLAG_USED; in g_cache_deliver()
209 dp->d_atime = time_uptime; in g_cache_deliver()
216 struct g_cache_desc *dp; in g_cache_done() local
221 dp = G_CACHE_DESC2(bp); in g_cache_done()
223 bp2 = dp->d_biolist; in g_cache_done()
227 g_cache_deliver(sc, bp2, dp, bp->bio_error); in g_cache_done()
230 dp->d_biolist = NULL; in g_cache_done()
231 if (dp->d_flags & D_FLAG_INVALID) { in g_cache_done()
233 g_cache_free(sc, dp); in g_cache_done()
235 LIST_REMOVE(dp, d_next); in g_cache_done()
236 if (dp->d_flags & D_FLAG_USED) { in g_cache_done()
237 TAILQ_REMOVE(&sc->sc_usedlist, dp, d_used); in g_cache_done()
240 g_cache_free(sc, dp); in g_cache_done()
249 struct g_cache_desc *dp; in g_cache_lookup() local
253 LIST_FOREACH(dp, &sc->sc_desclist[G_CACHE_BUCKET(bno)], d_next) in g_cache_lookup()
254 if (dp->d_bno == bno) in g_cache_lookup()
255 return (dp); in g_cache_lookup()
263 struct g_cache_desc *dp; in g_cache_read() local
266 dp = g_cache_lookup(sc, in g_cache_read()
268 if (dp != NULL) { in g_cache_read()
271 if (dp->d_biolist != NULL) { in g_cache_read()
273 G_CACHE_NEXT_BIO2(bp) = dp->d_biolist; in g_cache_read()
274 dp->d_biolist = bp; in g_cache_read()
276 g_cache_deliver(sc, bp, dp, 0); in g_cache_read()
283 dp = g_cache_alloc(sc); in g_cache_read()
284 if (dp == NULL) { in g_cache_read()
290 g_cache_free(sc, dp); in g_cache_read()
295 dp->d_bno = OFF2BNO(bp->bio_offset + bp->bio_completed, sc); in g_cache_read()
298 dp->d_biolist = bp; in g_cache_read()
299 LIST_INSERT_HEAD(&sc->sc_desclist[G_CACHE_BUCKET(dp->d_bno)], in g_cache_read()
300 dp, d_next); in g_cache_read()
304 G_CACHE_DESC2(cbp) = dp; in g_cache_read()
306 cbp->bio_offset = BNO2OFF(dp->d_bno, sc); in g_cache_read()
307 cbp->bio_data = dp->d_data; in g_cache_read()
316 struct g_cache_desc *dp; in g_cache_invalidate() local
323 if ((dp = g_cache_lookup(sc, bno)) != NULL) { in g_cache_invalidate()
324 LIST_REMOVE(dp, d_next); in g_cache_invalidate()
325 if (dp->d_flags & D_FLAG_USED) { in g_cache_invalidate()
326 TAILQ_REMOVE(&sc->sc_usedlist, dp, d_used); in g_cache_invalidate()
329 if (dp->d_biolist == NULL) in g_cache_invalidate()
330 g_cache_free(sc, dp); in g_cache_invalidate()
332 dp->d_flags = D_FLAG_INVALID; in g_cache_invalidate()
346 struct g_cache_desc *dp; in g_cache_start() local
372 dp = g_cache_lookup(sc, OFF2BNO(bp->bio_offset, sc)); in g_cache_start()
373 if (dp == NULL || dp->d_biolist != NULL) { in g_cache_start()
379 g_cache_deliver(sc, bp, dp, 0); in g_cache_start()
408 struct g_cache_desc *dp; in g_cache_go() local
415 LIST_FOREACH(dp, &sc->sc_desclist[i], d_next) { in g_cache_go()
416 if (dp->d_flags & D_FLAG_USED || in g_cache_go()
417 dp->d_biolist != NULL || in g_cache_go()
418 time_uptime - dp->d_atime < g_cache_idletime) in g_cache_go()
420 TAILQ_INSERT_TAIL(&sc->sc_usedlist, dp, d_used); in g_cache_go()
422 dp->d_flags |= D_FLAG_USED; in g_cache_go()
556 struct g_cache_desc *dp, *dp2; in g_cache_destroy() local
579 dp = LIST_FIRST(&sc->sc_desclist[i]); in g_cache_destroy()
580 while (dp != NULL) { in g_cache_destroy()
581 dp2 = LIST_NEXT(dp, d_next); in g_cache_destroy()
582 g_cache_free(sc, dp); in g_cache_destroy()
583 dp = dp2; in g_cache_destroy()