Lines Matching refs:lp

109 fmd_log_write(fmd_log_t *lp, const void *buf, size_t n)  in fmd_log_write()  argument
114 ASSERT(MUTEX_HELD(&lp->log_lock)); in fmd_log_write()
117 if ((len = write(lp->log_fd, buf, resid)) <= 0) in fmd_log_write()
131 fmd_log_write_hdr(fmd_log_t *lp, const char *tag) in fmd_log_write_hdr() argument
142 (void) fmd_conf_getprop(fmd.d_conf, "uuidlen", &lp->log_uuidlen); in fmd_log_write_hdr()
144 lp->log_uuid = fmd_zalloc(lp->log_uuidlen + 1, FMD_SLEEP); in fmd_log_write_hdr()
146 uuid_unparse(uuid, lp->log_uuid); in fmd_log_write_hdr()
156 err |= ea_set_item(&i5, CAT_FMA_UUID, lp->log_uuid, 0); in fmd_log_write_hdr()
177 if ((lp->log_off = lseek64(lp->log_fd, 0, SEEK_END)) == -1L) in fmd_log_write_hdr()
178 fmd_panic("failed to seek log %s", lp->log_name); in fmd_log_write_hdr()
180 if (fmd_log_write(lp, buf, size) != size) in fmd_log_write_hdr()
185 lp->log_toc = lp->log_off + hdr_size; in fmd_log_write_hdr()
186 lp->log_beg = lp->log_off + hdr_size + toc_size; in fmd_log_write_hdr()
187 lp->log_off = lp->log_off + hdr_size + toc_size; in fmd_log_write_hdr()
189 if (lp->log_off != lseek64(lp->log_fd, 0, SEEK_END)) in fmd_log_write_hdr()
190 fmd_panic("eof off != log_off 0x%llx\n", lp->log_off); in fmd_log_write_hdr()
206 fmd_log_check_err(fmd_log_t *lp, int err, const char *msg) in fmd_log_check_err() argument
212 lp->log_name, msg, eaerr != EXR_OK ? in fmd_log_check_err()
220 fmd_log_check_hdr(fmd_log_t *lp, const char *tag) in fmd_log_check_hdr() argument
228 ea_clear(&lp->log_ea); /* resync exacct file */ in fmd_log_check_hdr()
230 if ((hdr_off = lseek64(lp->log_fd, 0, SEEK_CUR)) == -1L) in fmd_log_check_hdr()
231 fmd_panic("failed to seek log %s", lp->log_name); in fmd_log_check_hdr()
238 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL || in fmd_log_check_hdr()
241 return (fmd_log_check_err(lp, EFMD_LOG_INVAL, in fmd_log_check_hdr()
267 lp->log_name, obj->eo_item.ei_string); in fmd_log_check_hdr()
279 lp->log_name, obj->eo_item.ei_string, tag); in fmd_log_check_hdr()
286 lp->log_uuid = fmd_strdup(obj->eo_item.ei_string, in fmd_log_check_hdr()
288 lp->log_uuidlen = strlen(lp->log_uuid); in fmd_log_check_hdr()
298 "include mandatory version and/or label\n", lp->log_name); in fmd_log_check_hdr()
307 if ((grp = ea_get_object_tree(&lp->log_ea, 1)) == NULL || in fmd_log_check_hdr()
311 return (fmd_log_check_err(lp, EFMD_LOG_INVAL, in fmd_log_check_hdr()
315 lp->log_toc = hdr_off + hdr_size; in fmd_log_check_hdr()
316 lp->log_beg = hdr_off + hdr_size + ea_pack_object(grp, NULL, 0); in fmd_log_check_hdr()
317 lp->log_off = lseek64(lp->log_fd, 0, SEEK_END); in fmd_log_check_hdr()
318 lp->log_skip = grp->eo_group.eg_objs->eo_item.ei_uint64; in fmd_log_check_hdr()
320 if (lp->log_skip > lp->log_off) { in fmd_log_check_hdr()
322 "resetting to zero\n", lp->log_name, lp->log_skip); in fmd_log_check_hdr()
323 lp->log_skip = 0; in fmd_log_check_hdr()
331 fmd_log_open_exacct(fmd_log_t *lp, int aflags, int oflags) in fmd_log_open_exacct() argument
333 int fd = dup(lp->log_fd); in fmd_log_open_exacct()
338 if (ea_fdopen(&lp->log_ea, fd, creator, aflags, oflags) != 0) { in fmd_log_open_exacct()
340 lp->log_name, fmd_ea_strerror(ea_error())); in fmd_log_open_exacct()
345 lp->log_flags |= FMD_LF_EAOPEN; in fmd_log_open_exacct()
352 fmd_log_t *lp = fmd_zalloc(sizeof (fmd_log_t), FMD_SLEEP); in fmd_log_xopen() local
359 (void) pthread_mutex_init(&lp->log_lock, NULL); in fmd_log_xopen()
360 (void) pthread_cond_init(&lp->log_cv, NULL); in fmd_log_xopen()
361 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_xopen()
366 lp->log_name = fmd_alloc(len, FMD_SLEEP); in fmd_log_xopen()
367 (void) snprintf(lp->log_name, len, "%s%s%s", root, slash, name); in fmd_log_xopen()
368 lp->log_tag = fmd_strdup(tag, FMD_SLEEP); in fmd_log_xopen()
369 (void) fmd_conf_getprop(fmd.d_conf, "log.minfree", &lp->log_minfree); in fmd_log_xopen()
371 if (strcmp(lp->log_tag, FMD_LOG_ERROR) == 0) in fmd_log_xopen()
372 lp->log_flags |= FMD_LF_REPLAY; in fmd_log_xopen()
374 if (strcmp(lp->log_tag, FMD_LOG_XPRT) == 0) in fmd_log_xopen()
378 if ((lp->log_fd = open64(lp->log_name, oflags, 0644)) == -1 || in fmd_log_xopen()
379 fstat64(lp->log_fd, &lp->log_stat) == -1) { in fmd_log_xopen()
380 fmd_error(EFMD_LOG_OPEN, "failed to open log %s", lp->log_name); in fmd_log_xopen()
381 fmd_log_close(lp); in fmd_log_xopen()
392 if (lp->log_stat.st_size == 0) { in fmd_log_xopen()
393 err = fmd_log_open_exacct(lp, EO_VALID_HDR | EO_TAIL, in fmd_log_xopen()
394 O_CREAT | O_WRONLY) || fmd_log_write_hdr(lp, tag); in fmd_log_xopen()
396 err = fmd_log_open_exacct(lp, EO_VALID_HDR | EO_HEAD, in fmd_log_xopen()
397 O_RDONLY) || fmd_log_check_hdr(lp, tag); in fmd_log_xopen()
407 "failed to initialize log %s", lp->log_name); in fmd_log_xopen()
409 if (lp->log_flags & FMD_LF_EAOPEN) { in fmd_log_xopen()
410 lp->log_flags &= ~FMD_LF_EAOPEN; in fmd_log_xopen()
411 (void) ea_close(&lp->log_ea); in fmd_log_xopen()
414 (void) close(lp->log_fd); in fmd_log_xopen()
415 lp->log_fd = -1; in fmd_log_xopen()
417 if (lp->log_stat.st_size != 0 && snprintf(buf, in fmd_log_xopen()
418 sizeof (buf), "%s-", lp->log_name) < PATH_MAX && in fmd_log_xopen()
419 rename(lp->log_name, buf) == 0) { in fmd_log_xopen()
420 TRACE((FMD_DBG_LOG, "mv %s to %s", lp->log_name, buf)); in fmd_log_xopen()
425 fmd_log_close(lp); in fmd_log_xopen()
429 lp->log_refs++; in fmd_log_xopen()
430 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_xopen()
432 return (lp); in fmd_log_xopen()
448 fmd_log_close(fmd_log_t *lp) in fmd_log_close() argument
450 ASSERT(MUTEX_HELD(&lp->log_lock)); in fmd_log_close()
451 ASSERT(lp->log_refs == 0); in fmd_log_close()
453 if ((lp->log_flags & FMD_LF_EAOPEN) && ea_close(&lp->log_ea) != 0) { in fmd_log_close()
455 lp->log_name, fmd_ea_strerror(ea_error())); in fmd_log_close()
458 if (lp->log_fd >= 0 && close(lp->log_fd) != 0) { in fmd_log_close()
460 "failed to close log %s", lp->log_name); in fmd_log_close()
463 fmd_strfree(lp->log_name); in fmd_log_close()
464 fmd_strfree(lp->log_tag); in fmd_log_close()
465 if (lp->log_uuid != NULL) in fmd_log_close()
466 fmd_free(lp->log_uuid, lp->log_uuidlen + 1); in fmd_log_close()
468 fmd_free(lp, sizeof (fmd_log_t)); in fmd_log_close()
472 fmd_log_hold_pending(fmd_log_t *lp) in fmd_log_hold_pending() argument
474 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_hold_pending()
476 lp->log_refs++; in fmd_log_hold_pending()
477 ASSERT(lp->log_refs != 0); in fmd_log_hold_pending()
479 if (lp->log_flags & FMD_LF_REPLAY) { in fmd_log_hold_pending()
480 lp->log_pending++; in fmd_log_hold_pending()
481 ASSERT(lp->log_pending != 0); in fmd_log_hold_pending()
484 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_hold_pending()
488 fmd_log_hold(fmd_log_t *lp) in fmd_log_hold() argument
490 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_hold()
491 lp->log_refs++; in fmd_log_hold()
492 ASSERT(lp->log_refs != 0); in fmd_log_hold()
493 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_hold()
497 fmd_log_rele(fmd_log_t *lp) in fmd_log_rele() argument
499 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_rele()
500 ASSERT(lp->log_refs != 0); in fmd_log_rele()
502 if (--lp->log_refs == 0) in fmd_log_rele()
503 fmd_log_close(lp); in fmd_log_rele()
505 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_rele()
509 fmd_log_append(fmd_log_t *lp, fmd_event_t *e, fmd_case_t *cp) in fmd_log_append() argument
530 if (lp->log_flags & FMD_LF_REPLAY) in fmd_log_append()
625 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_append()
627 if (lp->log_minfree != 0 && fstatvfs64(lp->log_fd, &stv) == 0 && in fmd_log_append()
628 stv.f_bavail * stv.f_frsize < lp->log_minfree + easize) { in fmd_log_append()
630 TRACE((FMD_DBG_LOG, "append %s crosses minfree", lp->log_tag)); in fmd_log_append()
633 } else if (fmd_log_write(lp, eabuf, easize) == easize) { in fmd_log_append()
635 lp->log_tag, (void *)ep, (u_longlong_t)lp->log_off)); in fmd_log_append()
638 ep->ev_log = lp; in fmd_log_append()
639 ep->ev_off = lp->log_off; in fmd_log_append()
642 if (lp->log_flags & FMD_LF_REPLAY) { in fmd_log_append()
643 lp->log_pending++; in fmd_log_append()
644 ASSERT(lp->log_pending != 0); in fmd_log_append()
647 lp->log_refs++; in fmd_log_append()
648 ASSERT(lp->log_refs != 0); in fmd_log_append()
649 lp->log_off += easize; in fmd_log_append()
658 (void) lseek64(lp->log_fd, lp->log_off, SEEK_SET); in fmd_log_append()
659 (void) ftruncate64(lp->log_fd, lp->log_off); in fmd_log_append()
662 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_append()
695 if (lp == fmd.d_errlog) in fmd_log_append()
697 else if (lp == fmd.d_fltlog) in fmd_log_append()
709 lp->log_tag, (void *)ep, fmd_strerror(err)); in fmd_log_append()
723 fmd_log_commit(fmd_log_t *lp, fmd_event_t *e) in fmd_log_commit() argument
729 if (!(lp->log_flags & FMD_LF_REPLAY)) in fmd_log_commit()
733 ASSERT(ep->ev_log == lp && ep->ev_off != 0); in fmd_log_commit()
738 if (pwrite64(lp->log_fd, &c, sizeof (c), ep->ev_off) == sizeof (c)) { in fmd_log_commit()
739 TRACE((FMD_DBG_LOG, "commit %s %p", lp->log_tag, (void *)ep)); in fmd_log_commit()
746 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_commit()
748 if (lp->log_skip == ep->ev_off) { in fmd_log_commit()
749 lp->log_flags |= FMD_LF_DIRTY; in fmd_log_commit()
750 lp->log_skip += ep->ev_len; in fmd_log_commit()
753 ASSERT(lp->log_pending != 0); in fmd_log_commit()
754 lp->log_pending--; in fmd_log_commit()
756 (void) pthread_cond_broadcast(&lp->log_cv); in fmd_log_commit()
757 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_commit()
761 lp->log_tag, (void *)ep, fmd_strerror(err)); in fmd_log_commit()
771 fmd_log_decommit(fmd_log_t *lp, fmd_event_t *e) in fmd_log_decommit() argument
775 if (!(lp->log_flags & FMD_LF_REPLAY)) in fmd_log_decommit()
779 ASSERT(ep->ev_log == lp); in fmd_log_decommit()
781 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_decommit()
783 TRACE((FMD_DBG_LOG, "decommit %s %p", lp->log_tag, (void *)ep)); in fmd_log_decommit()
786 ASSERT(lp->log_pending != 0); in fmd_log_decommit()
787 lp->log_pending--; in fmd_log_decommit()
789 (void) pthread_cond_broadcast(&lp->log_cv); in fmd_log_decommit()
790 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_decommit()
794 fmd_log_unpack(fmd_log_t *lp, ea_object_t *grp, off64_t off) in fmd_log_unpack() argument
839 &ftv, nvl, class, lp, off, ea_pack_object(grp, NULL, 0))); in fmd_log_unpack()
850 fmd_log_replay(fmd_log_t *lp, fmd_log_f *func, void *data) in fmd_log_replay() argument
859 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_replay()
861 if (lp->log_stat.st_size == 0 && (lp->log_flags & FMD_LF_REPLAY)) { in fmd_log_replay()
862 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_replay()
866 while (lp->log_flags & FMD_LF_BUSY) in fmd_log_replay()
867 (void) pthread_cond_wait(&lp->log_cv, &lp->log_lock); in fmd_log_replay()
869 if (lp->log_off == lp->log_beg) { in fmd_log_replay()
870 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_replay()
874 lp->log_flags |= FMD_LF_BUSY; in fmd_log_replay()
875 skp = lp->log_skip; in fmd_log_replay()
876 ea_clear(&lp->log_ea); /* resync exacct file */ in fmd_log_replay()
882 if (lp->log_flags & FMD_LF_REPLAY) { in fmd_log_replay()
883 off = MAX(lp->log_beg, lp->log_skip); in fmd_log_replay()
886 off = lp->log_off; in fmd_log_replay()
890 if (lseek64(lp->log_fd, off, SEEK_SET) != off) { in fmd_log_replay()
892 lp->log_name, (u_longlong_t)off); in fmd_log_replay()
899 if (!(lp->log_flags & FMD_LF_REPLAY) && in fmd_log_replay()
900 (type = ea_previous_object(&lp->log_ea, &obj)) != EO_GROUP) { in fmd_log_replay()
906 while ((grp = ea_get_object_tree(&lp->log_ea, 1)) != NULL) { in fmd_log_replay()
907 if (!(lp->log_flags & FMD_LF_REPLAY)) in fmd_log_replay()
918 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_replay()
921 (ep = fmd_log_unpack(lp, grp, off)) != NULL) { in fmd_log_replay()
924 lp->log_tag, (void *)ep, (u_longlong_t)off)); in fmd_log_replay()
927 func(lp, ep, data); in fmd_log_replay()
932 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_replay()
939 "offset 0x%llx: %s\n", lp->log_name, (u_longlong_t)off, in fmd_log_replay()
947 if (lseek64(lp->log_fd, lp->log_off, SEEK_SET) != lp->log_off) { in fmd_log_replay()
949 lp->log_name, (u_longlong_t)lp->log_off); in fmd_log_replay()
952 if (skp != lp->log_skip) { in fmd_log_replay()
953 lp->log_flags |= FMD_LF_DIRTY; in fmd_log_replay()
954 lp->log_skip = skp; in fmd_log_replay()
957 lp->log_flags &= ~FMD_LF_BUSY; in fmd_log_replay()
958 (void) pthread_cond_broadcast(&lp->log_cv); in fmd_log_replay()
959 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_replay()
963 fmd_log_update(fmd_log_t *lp) in fmd_log_update() argument
970 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_update()
972 if (lp->log_flags & FMD_LF_DIRTY) { in fmd_log_update()
973 lp->log_flags &= ~FMD_LF_DIRTY; in fmd_log_update()
974 skip = lp->log_skip; in fmd_log_update()
977 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_update()
991 ASSERT(lp->log_toc + size == lp->log_beg); in fmd_log_update()
993 if (pwrite64(lp->log_fd, buf, size, lp->log_toc) == size) { in fmd_log_update()
997 "failed to log_update %s", lp->log_tag); in fmd_log_update()
1015 fmd_log_rotate(fmd_log_t *lp) in fmd_log_rotate() argument
1020 (void) snprintf(npath, sizeof (npath), "%s+", lp->log_name); in fmd_log_rotate()
1025 if ((nlp = fmd_log_open("", npath, lp->log_tag)) == NULL) { in fmd_log_rotate()
1031 (void) snprintf(npath, sizeof (npath), "%s.0-", lp->log_name); in fmd_log_rotate()
1032 (void) pthread_mutex_lock(&lp->log_lock); in fmd_log_rotate()
1039 if (lp->log_pending != 0) { in fmd_log_rotate()
1040 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_rotate()
1047 if (rename(lp->log_name, npath) != 0) { in fmd_log_rotate()
1048 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_rotate()
1049 fmd_error(EFMD_LOG_ROTATE, "failed to rename %s", lp->log_name); in fmd_log_rotate()
1056 if (rename(nlp->log_name, lp->log_name) != 0) { in fmd_log_rotate()
1057 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_rotate()
1070 nlp->log_name = fmd_strdup(lp->log_name, FMD_SLEEP); in fmd_log_rotate()
1077 if (lp->log_flags & FMD_LF_EAOPEN) { in fmd_log_rotate()
1078 (void) ea_close(&lp->log_ea); in fmd_log_rotate()
1079 lp->log_flags &= ~FMD_LF_EAOPEN; in fmd_log_rotate()
1082 (void) close(lp->log_fd); in fmd_log_rotate()
1083 lp->log_fd = -1; in fmd_log_rotate()
1085 (void) pthread_mutex_unlock(&lp->log_lock); in fmd_log_rotate()