Lines Matching defs:ifd
278 struct inotifyfd *ifd;
284 ifd = kmem_zalloc(sizeof(*ifd), KM_SLEEP);
285 mutex_init(&ifd->ifd_lock, MUTEX_DEFAULT, IPL_NONE);
286 mutex_init(&ifd->ifd_qlock, MUTEX_DEFAULT, IPL_NONE);
287 cv_init(&ifd->ifd_qcv, "inotify");
288 selinit(&ifd->ifd_sel);
289 TAILQ_INIT(&ifd->ifd_qhead);
291 ifd->ifd_nwds = 1;
292 ifd->ifd_wds = kmem_zalloc(ifd->ifd_nwds * sizeof(*ifd->ifd_wds),
301 ifd->ifd_kqfd = *retval;
312 fp->f_data = ifd;
320 KASSERT(fd_getfile(ifd->ifd_kqfd) != NULL);
321 fd_close(ifd->ifd_kqfd);
323 kmem_free(ifd->ifd_wds, ifd->ifd_nwds * sizeof(*ifd->ifd_wds));
324 kmem_free(ifd, sizeof(*ifd));
326 mutex_destroy(&ifd->ifd_lock);
327 mutex_destroy(&ifd->ifd_qlock);
328 cv_destroy(&ifd->ifd_qcv);
329 seldestroy(&ifd->ifd_sel);
411 * ifd->ifd_kqfd.
424 struct inotifyfd *ifd;
453 ifd = fp->f_data;
455 mutex_enter(&ifd->ifd_lock);
467 for (i = 0; i < ifd->ifd_nwds; i++) {
468 if (ifd->ifd_wds[i] != NULL) {
516 NOTE_DELETE|NOTE_REVOKE, 0, ifd);
522 error = kevent1(retval, ifd->ifd_kqfd, &kev, 1, NULL, 0, NULL,
532 if (wd+1 > ifd->ifd_nwds) {
534 (wd+1) * sizeof(*ifd->ifd_wds), KM_SLEEP);
535 memcpy(new_wds, ifd->ifd_wds,
536 ifd->ifd_nwds * sizeof(*ifd->ifd_wds));
538 kmem_free(ifd->ifd_wds,
539 ifd->ifd_nwds * sizeof(*ifd->ifd_wds));
541 ifd->ifd_wds = new_wds;
542 ifd->ifd_nwds = wd+1;
545 ifd->ifd_wds[wd] = get_inotify_dir_entries(wd, true);
585 && ifd == kn->kn_kevent.udata) {
606 mutex_exit(&ifd->ifd_lock);
613 * Remove a wd from ifd and close wd.
616 inotify_close_wd(struct inotifyfd *ifd, int wd)
629 mutex_enter(&ifd->ifd_lock);
631 KASSERT(0 <= wd && wd < ifd->ifd_nwds && ifd->ifd_wds[wd] != NULL);
633 kmem_free(ifd->ifd_wds[wd],
634 INOTIFY_DIR_ENTRIES_SIZE(ifd->ifd_wds[wd]->ide_count));
635 ifd->ifd_wds[wd] = NULL;
637 mutex_exit(&ifd->ifd_lock);
648 error = kevent1(&retval, ifd->ifd_kqfd, &kev, 1, NULL, 0, NULL, &k_ops);
657 * inotify_rm_watch(2). Close wd and remove it from ifd->ifd_wds.
667 struct inotifyfd *ifd;
682 ifd = fp->f_data;
683 if (wd < 0 || wd >= ifd->ifd_nwds || ifd->ifd_wds[wd] == NULL) {
688 error = inotify_close_wd(ifd, wd);
900 handle_write(struct inotifyfd *ifd, int wd, struct inotify_entry *buf,
906 mutex_enter(&ifd->ifd_lock);
908 old_idep = ifd->ifd_wds[wd];
914 mutex_exit(&ifd->ifd_lock);
967 ifd->ifd_wds[wd] = new_idep;
968 mutex_exit(&ifd->ifd_lock);
976 kevent_to_inotify(struct inotifyfd *ifd, int wd, enum vtype wtype,
1006 handle_write(ifd, wd, buf, nbuf);
1029 * XXX in theory we could call inotify_close_wd(ifd, wd) but if
1049 struct inotifyfd *ifd;
1058 * struct lwp *, so we don't have access to a real ifd
1062 * (Also because of this we need to get ifd under the same
1067 ifd = kn->kn_kevent.udata;
1081 KASSERT(!mutex_owned(&ifd->ifd_lock));
1083 mutex_enter(&ifd->ifd_qlock);
1090 if (ifd->ifd_qcount >= LINUX_INOTIFY_MAX_QUEUED)
1094 (void)kevent_to_inotify(ifd, kn->kn_id, vp->v_type, kn->kn_flags,
1096 for (i = 0; i < nbuf && ifd->ifd_qcount < LINUX_INOTIFY_MAX_QUEUED-1;
1101 TAILQ_INSERT_TAIL(&ifd->ifd_qhead, cur_ie, ie_entries);
1102 ifd->ifd_qcount++;
1111 TAILQ_INSERT_TAIL(&ifd->ifd_qhead, cur_ie, ie_entries);
1112 ifd->ifd_qcount++;
1116 cv_signal(&ifd->ifd_qcv);
1118 mutex_enter(&ifd->ifd_lock);
1119 selnotify(&ifd->ifd_sel, 0, NOTE_LOWAT);
1120 mutex_exit(&ifd->ifd_lock);
1126 mutex_exit(&ifd->ifd_qlock);
1140 struct inotifyfd *ifd = fp->f_data;
1142 mutex_enter(&ifd->ifd_qlock);
1144 if (ifd->ifd_qcount == 0) {
1150 while (ifd->ifd_qcount == 0) {
1152 error = cv_wait_sig(&ifd->ifd_qcv, &ifd->ifd_qlock);
1160 KASSERT(ifd->ifd_qcount > 0);
1161 KASSERT(mutex_owned(&ifd->ifd_qlock));
1164 while (ifd->ifd_qcount > 0) {
1165 cur_iep = TAILQ_FIRST(&ifd->ifd_qhead);
1184 TAILQ_REMOVE(&ifd->ifd_qhead, cur_iep, ie_entries);
1188 ifd->ifd_qcount--;
1193 if (ifd->ifd_qcount > 0)
1194 cv_signal(&ifd->ifd_qcv);
1196 mutex_exit(&ifd->ifd_qlock);
1209 struct inotifyfd *ifd = fp->f_data;
1211 for (i = 0; i < ifd->ifd_nwds; i++) {
1212 if (ifd->ifd_wds[i] != NULL) {
1213 error = inotify_close_wd(ifd, i);
1219 /* the reference we need to hold is ifd->ifd_kqfp */
1220 kqfp = fd_getfile(ifd->ifd_kqfd);
1223 ifd->ifd_kqfd));
1225 error = fd_close(ifd->ifd_kqfd);
1230 mutex_destroy(&ifd->ifd_lock);
1231 mutex_destroy(&ifd->ifd_qlock);
1232 cv_destroy(&ifd->ifd_qcv);
1233 seldestroy(&ifd->ifd_sel);
1235 kmem_free(ifd->ifd_wds, ifd->ifd_nwds * sizeof(*ifd->ifd_wds));
1236 kmem_free(ifd, sizeof(*ifd));
1249 struct inotifyfd *ifd = fp->f_data;
1253 mutex_enter(&ifd->ifd_qlock);
1255 if (ifd->ifd_qcount > 0)
1258 mutex_exit(&ifd->ifd_qlock);
1273 struct inotifyfd *ifd = fp->f_data;
1281 mutex_enter(&ifd->ifd_lock);
1282 selrecord_knote(&ifd->ifd_sel, kn);
1283 mutex_exit(&ifd->ifd_lock);
1294 struct inotifyfd *ifd = ((file_t *)kn->kn_obj)->f_data;
1296 mutex_enter(&ifd->ifd_lock);
1297 selremove_knote(&ifd->ifd_sel, kn);
1298 mutex_exit(&ifd->ifd_lock);
1307 struct inotifyfd *ifd = ((file_t *)kn->kn_obj)->f_data;
1310 KASSERT(mutex_owned(&ifd->ifd_lock));
1311 KASSERT(mutex_owned(&ifd->ifd_qlock));
1314 kn->kn_data = ifd->ifd_qcount;
1326 struct inotifyfd *ifd = fp->f_data;
1328 mutex_enter(&ifd->ifd_qlock);
1329 cv_broadcast(&ifd->ifd_qcv);
1330 mutex_exit(&ifd->ifd_qlock);