359 fdinfo.pr_fileflags <<= 16;
360 fdinfo.pr_fileflags |= fp->f_flag;
361 if ((fdinfo.pr_fileflags & (FSEARCH | FEXEC)) == 0)
362 fdinfo.pr_fileflags += FOPEN;
363 fdinfo.pr_offset = fp->f_offset;
364
365
366 fvp = fp->f_vnode;
367 VN_HOLD(fvp);
368 UF_EXIT(ufp);
369 mutex_exit(&fip->fi_lock);
370
371 /*
372 * There are some vnodes that have no corresponding
373 * path. Its reasonable for this to fail, in which
374 * case the path will remain an empty string.
375 */
376 (void) vnodetopath(vroot, fvp, fdinfo.pr_path,
377 sizeof (fdinfo.pr_path), credp);
378
379 error = VOP_GETATTR(fvp, &vattr, 0, credp, NULL);
380 if (error != 0) {
381 VN_RELE(fvp);
382 VN_RELE(vroot);
383 goto done;
384 }
385
386 if (fvp->v_type == VSOCK)
387 fdinfo.pr_fileflags |= sock_getfasync(fvp);
388
389 VN_RELE(fvp);
390
391 /*
392 * This logic mirrors fstat(), which we cannot use
393 * directly, as it calls copyout().
394 */
395 fdinfo.pr_major = getmajor(vattr.va_fsid);
396 fdinfo.pr_minor = getminor(vattr.va_fsid);
397 fdinfo.pr_ino = (ino64_t)vattr.va_nodeid;
398 fdinfo.pr_mode = VTTOIF(vattr.va_type) | vattr.va_mode;
399 fdinfo.pr_uid = vattr.va_uid;
400 fdinfo.pr_gid = vattr.va_gid;
401 fdinfo.pr_rmajor = getmajor(vattr.va_rdev);
402 fdinfo.pr_rminor = getminor(vattr.va_rdev);
403 fdinfo.pr_size = (off64_t)vattr.va_size;
|
359 fdinfo.pr_fileflags <<= 16;
360 fdinfo.pr_fileflags |= fp->f_flag;
361 if ((fdinfo.pr_fileflags & (FSEARCH | FEXEC)) == 0)
362 fdinfo.pr_fileflags += FOPEN;
363 fdinfo.pr_offset = fp->f_offset;
364
365
366 fvp = fp->f_vnode;
367 VN_HOLD(fvp);
368 UF_EXIT(ufp);
369 mutex_exit(&fip->fi_lock);
370
371 /*
372 * There are some vnodes that have no corresponding
373 * path. Its reasonable for this to fail, in which
374 * case the path will remain an empty string.
375 */
376 (void) vnodetopath(vroot, fvp, fdinfo.pr_path,
377 sizeof (fdinfo.pr_path), credp);
378
379 if (VOP_GETATTR(fvp, &vattr, 0, credp, NULL) != 0) {
380 VN_RELE(fvp);
381 VN_RELE(vroot);
382 continue;
383 }
384
385 if (fvp->v_type == VSOCK)
386 fdinfo.pr_fileflags |= sock_getfasync(fvp);
387
388 VN_RELE(fvp);
389
390 /*
391 * This logic mirrors fstat(), which we cannot use
392 * directly, as it calls copyout().
393 */
394 fdinfo.pr_major = getmajor(vattr.va_fsid);
395 fdinfo.pr_minor = getminor(vattr.va_fsid);
396 fdinfo.pr_ino = (ino64_t)vattr.va_nodeid;
397 fdinfo.pr_mode = VTTOIF(vattr.va_type) | vattr.va_mode;
398 fdinfo.pr_uid = vattr.va_uid;
399 fdinfo.pr_gid = vattr.va_gid;
400 fdinfo.pr_rmajor = getmajor(vattr.va_rdev);
401 fdinfo.pr_rminor = getminor(vattr.va_rdev);
402 fdinfo.pr_size = (off64_t)vattr.va_size;
|