41 if (n == SEG->scb[SEG->cur].n)
46 if (SEG->load_idx[n] >= 0) {
47 cur = SEG->load_idx[n];
49 if (SEG->scb[cur].age != SEG->youngest) {
51 SEG->scb[cur].age->younger->older = SEG->scb[cur].age->older;
52 SEG->scb[cur].age->older->younger = SEG->scb[cur].age->younger;
54 SEG->scb[cur].age->younger = SEG->youngest->younger;
55 SEG->scb[cur].age->older = SEG->youngest;
56 SEG->scb[cur].age->older->younger = SEG->scb[cur].age;
57 SEG->scb[cur].age->younger->older = SEG->scb[cur].age;
59 SEG->youngest = SEG->scb[cur].age;
62 return SEG->cur = cur;
66 if (!SEG->nfreeslots) {
68 SEG->oldest = SEG->oldest->younger;
69 cur = SEG->oldest->cur;
70 SEG->oldest->cur = -1;
73 if (SEG->scb[cur].n >= 0) {
74 SEG->load_idx[SEG->scb[cur].n] = -1;
77 if (SEG->scb[cur].dirty) {
85 cur = SEG->freeslot[--SEG->nfreeslots];
90 SEG->scb[cur].dirty = 0;
91 SEG->seek(SEG, SEG->scb[cur].n, 0);
93 read_result = read(SEG->fd, SEG->scb[cur].buf, SEG->size);
95 if (read_result == 0) {
99 G_debug(1,
"Segment pagein: zero read");
100 memset(SEG->scb[cur].buf, 0, SEG->size);
102 else if (read_result != SEG->size) {
103 G_debug(2,
"Segment pagein: read_result=%d SEG->size=%d", read_result,
107 G_warning(
"Segment pagein: %s", strerror(errno));
109 G_warning(
"Segment pagein: short count during read(), got %d, "
111 read_result, SEG->size);
117 SEG->load_idx[n] = cur;
120 SEG->youngest = SEG->youngest->younger;
121 SEG->scb[cur].age = SEG->youngest;
122 SEG->youngest->cur = cur;
124 return SEG->cur = cur;
int seg_pagein(SEGMENT *SEG, int n)
Internal use only.
int seg_pageout(SEGMENT *SEG, int i)
Internal use only.