Lines Matching refs:lbp

93 	struct nfslog_buf	*lbp = NULL;  in nfslog_open_buf()  local
100 if ((lbp = malloc(sizeof (struct nfslog_buf))) == NULL) { in nfslog_open_buf()
104 bzero(lbp, sizeof (struct nfslog_buf)); in nfslog_open_buf()
106 if (nfslog_init_buf(bufpath, lbp, error)) { in nfslog_open_buf()
107 free(lbp); in nfslog_open_buf()
110 return (lbp); in nfslog_open_buf()
117 nfslog_close_buf(struct nfslog_buf *lbp, int close_quick) in nfslog_close_buf() argument
119 nfslog_free_buf(lbp, close_quick); in nfslog_close_buf()
120 free(lbp); in nfslog_close_buf()
134 nfslog_init_buf(char *bufpath, struct nfslog_buf *lbp, int *error) in nfslog_init_buf() argument
139 lbp->next = lbp; in nfslog_init_buf()
140 lbp->prev = lbp; in nfslog_init_buf()
144 lbp->mmap_addr = (intptr_t)MAP_FAILED; in nfslog_init_buf()
145 lbp->last_rec_id = MAXINT - 1; in nfslog_init_buf()
146 lbp->bh.bh_length = 0; in nfslog_init_buf()
147 lbp->bh_lrp = NULL; in nfslog_init_buf()
148 lbp->num_lrps = 0; in nfslog_init_buf()
149 lbp->lrps = NULL; in nfslog_init_buf()
150 lbp->last_record_offset = 0; in nfslog_init_buf()
151 lbp->prp = NULL; in nfslog_init_buf()
152 lbp->num_pr_queued = 0; in nfslog_init_buf()
154 lbp->bufpath = strdup(bufpath); in nfslog_init_buf()
155 if (lbp->bufpath == NULL) { in nfslog_init_buf()
161 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
165 if ((lbp->fd = open(bufpath, O_RDWR)) < 0) { in nfslog_init_buf()
171 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
180 lbp->fl.l_type = F_WRLCK; in nfslog_init_buf()
181 lbp->fl.l_whence = SEEK_SET; /* beginning of file */ in nfslog_init_buf()
182 lbp->fl.l_start = (offset_t)0; in nfslog_init_buf()
183 lbp->fl.l_len = 0; /* entire file */ in nfslog_init_buf()
184 lbp->fl.l_sysid = 0; in nfslog_init_buf()
185 lbp->fl.l_pid = 0; in nfslog_init_buf()
186 if (fcntl(lbp->fd, F_SETLKW, &lbp->fl) == -1) { in nfslog_init_buf()
192 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
196 if (fstat(lbp->fd, &sb)) { in nfslog_init_buf()
202 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
205 lbp->filesize = sb.st_size; in nfslog_init_buf()
207 lbp->mmap_addr = (intptr_t)mmap(0, lbp->filesize, PROT_READ|PROT_WRITE, in nfslog_init_buf()
208 MAP_SHARED|MAP_NORESERVE, lbp->fd, 0); in nfslog_init_buf()
211 if (lbp->mmap_addr == (intptr_t)MAP_FAILED) { in nfslog_init_buf()
212 lbp->next_rec = 0; in nfslog_init_buf()
214 lbp->next_rec = lbp->mmap_addr; in nfslog_init_buf()
218 if ((lbp->bh_lrp = nfslog_read_buffer(lbp)) == NULL) { in nfslog_init_buf()
225 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
229 if (!xdr_nfslog_buffer_header(&lbp->bh_lrp->xdrs, &lbp->bh)) { in nfslog_init_buf()
236 nfslog_free_buf(lbp, FALSE); in nfslog_init_buf()
245 lbp->next_rec += lbp->bh.bh_offset; in nfslog_init_buf()
254 if (lbp->mmap_addr == (intptr_t)MAP_FAILED && lbp->next_rec != 0) { in nfslog_init_buf()
255 (void) lseek(lbp->fd, lbp->next_rec, SEEK_SET); in nfslog_init_buf()
257 lbp->last_record_offset = lbp->next_rec; in nfslog_init_buf()
259 lbp->last_record_offset = lbp->next_rec - lbp->mmap_addr; in nfslog_init_buf()
269 nfslog_free_buf(struct nfslog_buf *lbp, int close_quick) in nfslog_free_buf() argument
278 if (lbp->prp) { in nfslog_free_buf()
279 if (lbp->last_record_offset == lbp->prp->start_offset) { in nfslog_free_buf()
282 lbp->last_record_offset = in nfslog_free_buf()
283 lbp->prp->start_offset + lbp->prp->len; in nfslog_free_buf()
285 nfslog_rewrite_bufheader(lbp); in nfslog_free_buf()
289 prp = lbp->prp; in nfslog_free_buf()
294 } while (lbp->prp != prp); in nfslog_free_buf()
301 if (lbp->lrps != NULL) { in nfslog_free_buf()
302 lrp = lbp->lrps; in nfslog_free_buf()
307 } while (lrp != lbp->lrps); in nfslog_free_buf()
308 lbp->lrps = NULL; in nfslog_free_buf()
312 if (lbp->bh.bh_length != 0) { in nfslog_free_buf()
313 buffer = (lbp->bh_lrp->buffer != NULL ? in nfslog_free_buf()
314 lbp->bh_lrp->buffer : (caddr_t)lbp->mmap_addr); in nfslog_free_buf()
315 xdrmem_create(&xdrs, buffer, lbp->bh_lrp->recsize, XDR_FREE); in nfslog_free_buf()
316 (void) xdr_nfslog_buffer_header(&xdrs, &lbp->bh); in nfslog_free_buf()
317 lbp->bh.bh_length = 0; in nfslog_free_buf()
321 if (lbp->bh_lrp != NULL) { in nfslog_free_buf()
322 free_lrp(lbp->bh_lrp); in nfslog_free_buf()
323 lbp->bh_lrp = NULL; in nfslog_free_buf()
327 if (lbp->mmap_addr != (intptr_t)MAP_FAILED) { in nfslog_free_buf()
328 if (munmap((void *)lbp->mmap_addr, lbp->filesize)) { in nfslog_free_buf()
331 (lbp->bufpath != NULL ? lbp->bufpath : ""), in nfslog_free_buf()
334 lbp->mmap_addr = (intptr_t)MAP_FAILED; in nfslog_free_buf()
338 if (lbp->fd >= 0) { in nfslog_free_buf()
339 lbp->fl.l_type = F_UNLCK; in nfslog_free_buf()
340 if (fcntl(lbp->fd, F_SETLK, &lbp->fl) == -1) { in nfslog_free_buf()
344 (lbp->bufpath != NULL ? lbp->bufpath : ""), in nfslog_free_buf()
347 (void) close(lbp->fd); in nfslog_free_buf()
348 lbp->fd = -1; in nfslog_free_buf()
350 if (lbp->bufpath != NULL) in nfslog_free_buf()
351 free(lbp->bufpath); in nfslog_free_buf()
363 nfslog_read_buffer(struct nfslog_buf *lbp) in nfslog_read_buffer() argument
376 if (lbp->mmap_addr == (intptr_t)MAP_FAILED) { in nfslog_read_buffer()
380 if (read(lbp->fd, tbuf, BYTES_PER_XDR_UNIT) <= 0) { in nfslog_read_buffer()
387 if (lbp->filesize <= lbp->next_rec - lbp->mmap_addr) { in nfslog_read_buffer()
391 sizebuf = (char *)(uintptr_t)lbp->next_rec; in nfslog_read_buffer()
403 next_rec = lbp->next_rec + lrp->recsize; in nfslog_read_buffer()
405 if (lbp->mmap_addr == (intptr_t)MAP_FAILED) { in nfslog_read_buffer()
411 if (lbp->filesize < next_rec) { in nfslog_read_buffer()
415 "discarded\n"), lbp->bufpath); in nfslog_read_buffer()
425 if (read(lbp->fd, &lrp->buffer[BYTES_PER_XDR_UNIT], in nfslog_read_buffer()
430 } else if (lbp->filesize < next_rec - lbp->mmap_addr) { in nfslog_read_buffer()
434 "discarded\n"), lbp->bufpath); in nfslog_read_buffer()
443 if (lbp->mmap_addr == (intptr_t)MAP_FAILED) in nfslog_read_buffer()
444 lrp->f_offset = lbp->next_rec; in nfslog_read_buffer()
446 lrp->f_offset = lbp->next_rec - lbp->mmap_addr; in nfslog_read_buffer()
448 lrp->record = lbp->next_rec; in nfslog_read_buffer()
450 lrp->lbp = lbp; in nfslog_read_buffer()
459 lbp->next_rec = next_rec; in nfslog_read_buffer()
469 remove_lrp_from_lb(struct nfslog_buf *lbp, struct nfslog_lr *lrp) in remove_lrp_from_lb() argument
471 if (lbp->lrps == lrp) { in remove_lrp_from_lb()
472 if (lbp->lrps == lbp->lrps->next) { in remove_lrp_from_lb()
473 lbp->lrps = NULL; in remove_lrp_from_lb()
475 lbp->lrps = lrp->next; in remove_lrp_from_lb()
481 lbp->num_lrps--; in remove_lrp_from_lb()
494 insert_lrp_to_lb(struct nfslog_buf *lbp, struct nfslog_lr *lrp) in insert_lrp_to_lb() argument
499 if (lbp->lrps == NULL) { in insert_lrp_to_lb()
501 lbp->lrps = lrp; in insert_lrp_to_lb()
509 if (ins_rec_id < lbp->lrps->log_record.re_header.rh_rec_id) { in insert_lrp_to_lb()
510 lrp->next = lbp->lrps; in insert_lrp_to_lb()
511 lrp->prev = lbp->lrps->prev; in insert_lrp_to_lb()
512 lbp->lrps->prev->next = lrp; in insert_lrp_to_lb()
513 lbp->lrps->prev = lrp; in insert_lrp_to_lb()
514 lbp->lrps = lrp; in insert_lrp_to_lb()
521 curlrp = lbp->lrps; in insert_lrp_to_lb()
527 } while (curlrp != lbp->lrps); in insert_lrp_to_lb()
528 if (curlrp == lbp->lrps) in insert_lrp_to_lb()
529 insque(lrp, lbp->lrps->prev); in insert_lrp_to_lb()
535 lbp->num_lrps++; in insert_lrp_to_lb()
549 nfslog_rewrite_bufheader(struct nfslog_buf *lbp) in nfslog_rewrite_bufheader() argument
562 if (lbp->bh.bh_flags & NFSLOG_BH_OFFSET_OVERFLOW) { in nfslog_rewrite_bufheader()
572 bh = lbp->bh; in nfslog_rewrite_bufheader()
580 (lbp->last_record_offset - bh.bh_length < UINT32_MAX)) { in nfslog_rewrite_bufheader()
581 bh.bh_offset = lbp->last_record_offset - bh.bh_length; in nfslog_rewrite_bufheader()
585 lbp->bh.bh_flags = bh.bh_flags; in nfslog_rewrite_bufheader()
588 "in a 32 bit field\n"), lbp->bufpath); in nfslog_rewrite_bufheader()
596 lbp->bufpath); in nfslog_rewrite_bufheader()
602 if (lbp->mmap_addr == (intptr_t)MAP_FAILED) { in nfslog_rewrite_bufheader()
604 (void) lseek(lbp->fd, 0, SEEK_SET); in nfslog_rewrite_bufheader()
605 (void) write(lbp->fd, buffer, wsize); in nfslog_rewrite_bufheader()
606 (void) lseek(lbp->fd, lbp->next_rec, SEEK_SET); in nfslog_rewrite_bufheader()
607 (void) fsync(lbp->fd); in nfslog_rewrite_bufheader()
609 bcopy(buffer, (void *)lbp->mmap_addr, wsize); in nfslog_rewrite_bufheader()
610 (void) msync((void *)lbp->mmap_addr, wsize, MS_SYNC); in nfslog_rewrite_bufheader()
646 lrp->lbp->num_pr_queued++; in nfslog_ins_last_rec_processed()
649 if (lrp->lbp->prp == NULL) { in nfslog_ins_last_rec_processed()
650 lrp->lbp->prp = prp; in nfslog_ins_last_rec_processed()
653 tp = lrp->lbp->prp; in nfslog_ins_last_rec_processed()
658 } while (tp != lrp->lbp->prp); in nfslog_ins_last_rec_processed()
665 if (tp == lrp->lbp->prp && prp->start_offset < tp->start_offset) in nfslog_ins_last_rec_processed()
666 lrp->lbp->prp = prp; in nfslog_ins_last_rec_processed()
692 if (lrp->lbp->num_pr_queued > MAX_RECS_TO_DELAY) { in nfslog_ins_last_rec_processed()
693 prp = lrp->lbp->prp; in nfslog_ins_last_rec_processed()
694 if (lrp->lbp->last_record_offset == in nfslog_ins_last_rec_processed()
698 lrp->lbp->last_record_offset = in nfslog_ins_last_rec_processed()
701 nfslog_rewrite_bufheader(lrp->lbp); in nfslog_ins_last_rec_processed()
708 lrp->lbp->prp = tp; in nfslog_ins_last_rec_processed()
709 lrp->lbp->num_pr_queued -= prp->num_recs; in nfslog_ins_last_rec_processed()
742 nfslog_get_logrecord(struct nfslog_buf *lbp) in nfslog_get_logrecord() argument
745 unsigned int next_rec_id = lbp->last_rec_id + 1; in nfslog_get_logrecord()
754 if (lbp->lrps != NULL) { in nfslog_get_logrecord()
756 if (lbp->lrps->log_record.re_header.rh_rec_id == next_rec_id) { in nfslog_get_logrecord()
757 lrp = remove_lrp_from_lb(lbp, lbp->lrps); in nfslog_get_logrecord()
758 lbp->last_rec_id = lrp->log_record.re_header.rh_rec_id; in nfslog_get_logrecord()
768 lbp->lrps->log_record.re_header.rh_rec_id && in nfslog_get_logrecord()
769 ((lbp->lrps->log_record.re_header.rh_rec_id - in nfslog_get_logrecord()
772 lrp = remove_lrp_from_lb(lbp, lbp->lrps); in nfslog_get_logrecord()
773 lbp->last_rec_id = in nfslog_get_logrecord()
789 if (lbp->num_lrps >= MAX_LRS_READ_AHEAD) { in nfslog_get_logrecord()
790 lrp = remove_lrp_from_lb(lbp, lbp->lrps); in nfslog_get_logrecord()
791 lbp->last_rec_id = lrp->log_record.re_header.rh_rec_id; in nfslog_get_logrecord()
801 if ((lrp = nfslog_read_buffer(lbp)) == NULL) { in nfslog_get_logrecord()
802 if (lbp->lrps != NULL) { in nfslog_get_logrecord()
803 lrp = remove_lrp_from_lb(lbp, lbp->lrps); in nfslog_get_logrecord()
804 lbp->last_rec_id = in nfslog_get_logrecord()
828 lbp->last_rec_id = in nfslog_get_logrecord()
836 insert_lrp_to_lb(lbp, lrp); in nfslog_get_logrecord()