Lines Matching refs:disk
49 Disk *disk; in diskAlloc() local
61 disk = vtMemAllocZ(sizeof(Disk)); in diskAlloc()
62 disk->lk = vtLockAlloc(); in diskAlloc()
63 disk->starve = vtRendezAlloc(disk->lk); in diskAlloc()
64 disk->flow = vtRendezAlloc(disk->lk); in diskAlloc()
65 disk->flush = vtRendezAlloc(disk->lk); in diskAlloc()
66 disk->fd = fd; in diskAlloc()
67 disk->h = h; in diskAlloc()
69 disk->ref = 2; in diskAlloc()
70 vtThread(diskThread, disk); in diskAlloc()
72 return disk; in diskAlloc()
76 diskFree(Disk *disk) in diskFree() argument
78 diskFlush(disk); in diskFree()
81 vtLock(disk->lk); in diskFree()
82 disk->die = vtRendezAlloc(disk->lk); in diskFree()
83 vtWakeup(disk->starve); in diskFree()
84 while(disk->ref > 1) in diskFree()
85 vtSleep(disk->die); in diskFree()
86 vtUnlock(disk->lk); in diskFree()
87 vtRendezFree(disk->flow); in diskFree()
88 vtRendezFree(disk->starve); in diskFree()
89 vtRendezFree(disk->die); in diskFree()
90 vtLockFree(disk->lk); in diskFree()
91 close(disk->fd); in diskFree()
92 vtMemFree(disk); in diskFree()
96 partStart(Disk *disk, int part) in partStart() argument
102 return disk->h.super; in partStart()
104 return disk->h.label; in partStart()
106 return disk->h.data; in partStart()
112 partEnd(Disk *disk, int part) in partEnd() argument
118 return disk->h.super+1; in partEnd()
120 return disk->h.data; in partEnd()
122 return disk->h.end; in partEnd()
127 diskReadRaw(Disk *disk, int part, u32int addr, uchar *buf) in diskReadRaw() argument
133 start = partStart(disk, part); in diskReadRaw()
134 end = partEnd(disk, part); in diskReadRaw()
141 offset = ((u64int)(addr + start))*disk->h.blockSize; in diskReadRaw()
142 n = disk->h.blockSize; in diskReadRaw()
144 nn = pread(disk->fd, buf, n, offset); in diskReadRaw()
161 diskWriteRaw(Disk *disk, int part, u32int addr, uchar *buf) in diskWriteRaw() argument
167 start = partStart(disk, part); in diskWriteRaw()
168 end = partEnd(disk, part); in diskWriteRaw()
175 offset = ((u64int)(addr + start))*disk->h.blockSize; in diskWriteRaw()
176 n = pwrite(disk->fd, buf, disk->h.blockSize, offset); in diskWriteRaw()
181 if(n < disk->h.blockSize) { in diskWriteRaw()
190 diskQueue(Disk *disk, Block *b) in diskQueue() argument
194 vtLock(disk->lk); in diskQueue()
195 while(disk->nqueue >= QueueSize) in diskQueue()
196 vtSleep(disk->flow); in diskQueue()
197 if(disk->cur == nil || b->addr > disk->cur->addr) in diskQueue()
198 bp = &disk->cur; in diskQueue()
200 bp = &disk->next; in diskQueue()
209 if(disk->nqueue == 0) in diskQueue()
210 vtWakeup(disk->starve); in diskQueue()
211 disk->nqueue++; in diskQueue()
212 vtUnlock(disk->lk); in diskQueue()
217 diskRead(Disk *disk, Block *b) in diskRead() argument
221 diskQueue(disk, b); in diskRead()
225 diskWrite(Disk *disk, Block *b) in diskWrite() argument
230 diskQueue(disk, b); in diskWrite()
234 diskWriteAndWait(Disk *disk, Block *b) in diskWriteAndWait() argument
249 diskWrite(disk, b); in diskWriteAndWait()
256 diskBlockSize(Disk *disk) in diskBlockSize() argument
258 return disk->h.blockSize; /* immuttable */ in diskBlockSize()
262 diskFlush(Disk *disk) in diskFlush() argument
266 vtLock(disk->lk); in diskFlush()
267 while(disk->nqueue > 0) in diskFlush()
268 vtSleep(disk->flush); in diskFlush()
269 vtUnlock(disk->lk); in diskFlush()
273 if(dirfwstat(disk->fd, &dir) < 0){ in diskFlush()
281 diskSize(Disk *disk, int part) in diskSize() argument
283 return partEnd(disk, part) - partStart(disk, part); in diskSize()
293 disk2file(Disk *disk) in disk2file() argument
297 if (fd2path(disk->fd, buf, sizeof buf) < 0) in disk2file()
305 Disk *disk = a; in diskThread() local
315 buf = vtMemAlloc(disk->h.blockSize); in diskThread()
317 vtLock(disk->lk); in diskThread()
323 while(disk->nqueue == 0){ in diskThread()
333 if(disk->die != nil) in diskThread()
335 vtSleep(disk->starve); in diskThread()
339 assert(disk->cur != nil || disk->next != nil); in diskThread()
341 if(disk->cur == nil){ in diskThread()
342 disk->cur = disk->next; in diskThread()
343 disk->next = nil; in diskThread()
345 b = disk->cur; in diskThread()
346 disk->cur = b->ionext; in diskThread()
347 vtUnlock(disk->lk); in diskThread()
363 if(!diskReadRaw(disk, b->part, b->addr, b->data)){ in diskThread()
366 disk2file(disk), b->score, in diskThread()
375 if(!diskWriteRaw(disk, b->part, b->addr, p)){ in diskThread()
378 disk2file(disk), b->score, in diskThread()
391 vtLock(disk->lk); in diskThread()
392 disk->nqueue--; in diskThread()
393 if(disk->nqueue == QueueSize-1) in diskThread()
394 vtWakeup(disk->flow); in diskThread()
395 if(disk->nqueue == 0) in diskThread()
396 vtWakeup(disk->flush); in diskThread()
402 disk->ref--; in diskThread()
403 vtWakeup(disk->die); in diskThread()
404 vtUnlock(disk->lk); in diskThread()