<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech-pubs.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Kernel%3A_vnode_and_vfs</id>
	<title>Kernel: vnode and vfs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech-pubs.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Kernel%3A_vnode_and_vfs"/>
	<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kernel:_vnode_and_vfs&amp;action=history"/>
	<updated>2026-04-14T12:30:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://tech-pubs.net/wiki/index.php?title=Kernel:_vnode_and_vfs&amp;diff=475&amp;oldid=prev</id>
		<title>Raion at 23:57, 9 January 2026</title>
		<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kernel:_vnode_and_vfs&amp;diff=475&amp;oldid=prev"/>
		<updated>2026-01-09T23:57:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:57, 9 January 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l153&quot;&gt;Line 153:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 153:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Kernel: vnode Operations]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Kernel: vnode Operations]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: Kernel Documentation]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Raion</name></author>
	</entry>
	<entry>
		<id>https://tech-pubs.net/wiki/index.php?title=Kernel:_vnode_and_vfs&amp;diff=439&amp;oldid=prev</id>
		<title>Raion: Created page with &quot;IRIX’s VFS (Virtual File System) and vnode architecture is conceptually similar to many UNIX-derived systems (BSD, System V, Solaris), but with some IRIX-specific behavior layering and STREAMS integration. The vnode system provides a uniform abstraction for all filesystem objects, enabling the kernel to operate generically on files, directories, FIFOs, and devices without knowing the underlying filesystem implementation.  === 1. Vnode: Abstract File Object ===  * Purpo...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kernel:_vnode_and_vfs&amp;diff=439&amp;oldid=prev"/>
		<updated>2025-12-27T05:04:26Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;IRIX’s VFS (Virtual File System) and vnode architecture is conceptually similar to many UNIX-derived systems (BSD, System V, Solaris), but with some IRIX-specific behavior layering and STREAMS integration. The vnode system provides a uniform abstraction for all filesystem objects, enabling the kernel to operate generically on files, directories, FIFOs, and devices without knowing the underlying filesystem implementation.  === 1. Vnode: Abstract File Object ===  * Purpo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;IRIX’s VFS (Virtual File System) and vnode architecture is conceptually similar to many UNIX-derived systems (BSD, System V, Solaris), but with some IRIX-specific behavior layering and STREAMS integration. The vnode system provides a uniform abstraction for all filesystem objects, enabling the kernel to operate generically on files, directories, FIFOs, and devices without knowing the underlying filesystem implementation.&lt;br /&gt;
&lt;br /&gt;
=== 1. Vnode: Abstract File Object ===&lt;br /&gt;
&lt;br /&gt;
* Purpose: Represents an in-memory file or pseudo-file object. Every file, device, pipe, or FIFO that a process can access has a corresponding vnode.&lt;br /&gt;
* Key Responsibilities:&lt;br /&gt;
** Maintain reference counts (&amp;lt;code&amp;gt;v_count&amp;lt;/code&amp;gt;) for lifecycle management.&lt;br /&gt;
** Track the type of file (&amp;lt;code&amp;gt;v_type&amp;lt;/code&amp;gt;), device association (&amp;lt;code&amp;gt;v_rdev&amp;lt;/code&amp;gt;), and filesystem association (&amp;lt;code&amp;gt;v_vfsp&amp;lt;/code&amp;gt;).&lt;br /&gt;
** Serve as a link to behavior-specific operations (via &amp;lt;code&amp;gt;v_bh&amp;lt;/code&amp;gt;).&lt;br /&gt;
** Integrate with streams (&amp;lt;code&amp;gt;v_stream&amp;lt;/code&amp;gt;) if the object is a pipe, TTY, or socket.&lt;br /&gt;
** Enable VM caching, delayed writes, and buffer trees for efficient I/O.&lt;br /&gt;
* Comparison to Solaris:  IRIX vnodes are conceptually similar to Solaris &amp;lt;code&amp;gt;vnode_t&amp;lt;/code&amp;gt;. Both provide:&lt;br /&gt;
** Reference counting&lt;br /&gt;
** Filesystem abstraction&lt;br /&gt;
** A behavior or operations layer&lt;br /&gt;
** VM caching integration  Differences: IRIX exposes &amp;lt;code&amp;gt;v_buf&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;v_dpages&amp;lt;/code&amp;gt; directly for buffer/page management; Solaris tends to isolate VM caching in the &amp;lt;code&amp;gt;vnode&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;vfs&amp;lt;/code&amp;gt; interface via &amp;lt;code&amp;gt;v_cache&amp;lt;/code&amp;gt; and VM layers.&lt;br /&gt;
&lt;br /&gt;
=== 2. Behavior Layer (BHV) ===&lt;br /&gt;
&lt;br /&gt;
* Purpose: Allows vnodes to stack filesystem-specific operations on top of a generic vnode.&lt;br /&gt;
* Mechanism:&lt;br /&gt;
** Each vnode has a behavior descriptor list (&amp;lt;code&amp;gt;v_bh&amp;lt;/code&amp;gt;).&lt;br /&gt;
** Filesystems (pipefs, efs, xfs, fifofs) insert their operations at initialization.&lt;br /&gt;
** Kernel vnode calls (&amp;lt;code&amp;gt;VOP_READ&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOP_WRITE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VOP_CLOSE&amp;lt;/code&amp;gt;) traverse the behavior chain to find the appropriate function.&lt;br /&gt;
* Comparison to Solaris:  IRIX’s BHV is functionally similar to Solaris’ VOP vector and shadow vnode mechanism in layered filesystems, but IRIX’s BHV model explicitly allows multiple behaviors per vnode (stacked operations).&lt;br /&gt;
&lt;br /&gt;
=== 3. VFS: Virtual Filesystem Layer ===&lt;br /&gt;
&lt;br /&gt;
* Purpose: Represents a mounted filesystem in-memory, providing a global interface for:&lt;br /&gt;
** File lookup&lt;br /&gt;
** Attribute management&lt;br /&gt;
** Mount/unmount operations&lt;br /&gt;
** Import/export for NFS or network filesystems&lt;br /&gt;
* VFS Operations (&amp;lt;code&amp;gt;vfsops_t&amp;lt;/code&amp;gt;):&lt;br /&gt;
** &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;umount&amp;lt;/code&amp;gt;: Mount/unmount filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;sync&amp;lt;/code&amp;gt;: Flush dirty data&lt;br /&gt;
** &amp;lt;code&amp;gt;statvfs&amp;lt;/code&amp;gt;: Retrieve filesystem statistics&lt;br /&gt;
** &amp;lt;code&amp;gt;vget&amp;lt;/code&amp;gt;: Lookup vnode by inode within the filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;quotactl&amp;lt;/code&amp;gt;: Manage quotas (if supported)&lt;br /&gt;
** &amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;: Handle import of remote filesystem data&lt;br /&gt;
** &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;: Provide vnode for root of FS&lt;br /&gt;
** &amp;lt;code&amp;gt;reclaim&amp;lt;/code&amp;gt;: Clean up filesystem-specific vnode state&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Note: In IRIX pipefs, most of these are &amp;lt;code&amp;gt;fs_nosys&amp;lt;/code&amp;gt; or dummy functions because pipefs is a pseudo-filesystem without persistent storage.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comparison to Solaris:&lt;br /&gt;
** Very similar to Solaris &amp;lt;code&amp;gt;vfsops_t&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Both systems separate filesystem-specific behavior (&amp;lt;code&amp;gt;vnodeops_t&amp;lt;/code&amp;gt;) from filesystem-wide operations (&amp;lt;code&amp;gt;vfsops_t&amp;lt;/code&amp;gt;).&lt;br /&gt;
** IRIX adds &amp;lt;code&amp;gt;vfs_insertbhv&amp;lt;/code&amp;gt; to bind a VFS to its BHV layer, enabling layered filesystems.&lt;br /&gt;
&lt;br /&gt;
=== 4. Vnode Operations (&amp;lt;code&amp;gt;vnodeops_t&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
* Purpose: Defines the operations you can perform on a vnode, such as read, write, ioctl, getattr, setattr, seek, poll, and more.&lt;br /&gt;
* IRIX Implementation Pattern:&lt;br /&gt;
** Functions take a behavior descriptor (&amp;lt;code&amp;gt;bhv_desc_t&amp;lt;/code&amp;gt;) instead of the vnode directly.&lt;br /&gt;
** For pseudo-filesystems like pipefs, the operations implement custom logic (e.g., &amp;lt;code&amp;gt;pipe_read&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pipe_write&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pipe_poll&amp;lt;/code&amp;gt;).&lt;br /&gt;
** Many operations are stubbed to &amp;lt;code&amp;gt;fs_nosys&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;fs_noerr&amp;lt;/code&amp;gt; if not meaningful (e.g., &amp;lt;code&amp;gt;vop_create&amp;lt;/code&amp;gt; in pipefs).&lt;br /&gt;
* Categories of operations:&lt;br /&gt;
*# File I/O: &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;write&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ioctl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fsync&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fcntl&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Attributes: &amp;lt;code&amp;gt;getattr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setattr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;access&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pathconf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;attr_get/set&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Directory/Namespace: &amp;lt;code&amp;gt;lookup&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;remove&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rmdir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;readdir&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;symlink&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;readlink&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Locking/Mapping: &amp;lt;code&amp;gt;rwlock&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rwunlock&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;addmap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;delmap&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frlock&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Streams support: &amp;lt;code&amp;gt;strgetmsg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strputmsg&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Polling/Selection: &amp;lt;code&amp;gt;poll&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;select&amp;lt;/code&amp;gt; integration via &amp;lt;code&amp;gt;pollhead&amp;lt;/code&amp;gt;&lt;br /&gt;
*# Cleanup: &amp;lt;code&amp;gt;inactive&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reclaim&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;realvp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cover&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;link_removed&amp;lt;/code&amp;gt;&lt;br /&gt;
* Comparison to Solaris:&lt;br /&gt;
** IRIX &amp;lt;code&amp;gt;vnodeops_t&amp;lt;/code&amp;gt; maps almost one-to-one to Solaris VOP functions.&lt;br /&gt;
** IRIX uses &amp;lt;code&amp;gt;bhv_desc_t&amp;lt;/code&amp;gt; for behavior dispatch; Solaris uses direct &amp;lt;code&amp;gt;vnode_t*&amp;lt;/code&amp;gt; and VOP macros.&lt;br /&gt;
** &amp;lt;code&amp;gt;pipefs&amp;lt;/code&amp;gt; shows how pseudo-filesystems are inserted into the BHV chain.&lt;br /&gt;
&lt;br /&gt;
=== 5. Lifecycle Management ===&lt;br /&gt;
&lt;br /&gt;
* Reference counting (&amp;lt;code&amp;gt;v_count&amp;lt;/code&amp;gt;) is used by:&lt;br /&gt;
** VFS, FS operations, streams, and user-level file descriptors.&lt;br /&gt;
* Inactive/Teardown:&lt;br /&gt;
** &amp;lt;code&amp;gt;vnode_inactive&amp;lt;/code&amp;gt; is called when the last reference is released.&lt;br /&gt;
** Pseudo-filesystems clean up buffers, semaphores, SVs, and polling structures.&lt;br /&gt;
* Reclaim:&lt;br /&gt;
** &amp;lt;code&amp;gt;vop_reclaim&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;fs_noerr&amp;lt;/code&amp;gt;) allows the FS to free internal structures before the vnode memory itself is freed.&lt;br /&gt;
* Comparison to Solaris:&lt;br /&gt;
** IRIX inactive/reclaim closely mirrors Solaris, where &amp;lt;code&amp;gt;VN_RELE&amp;lt;/code&amp;gt; triggers &amp;lt;code&amp;gt;VOP_INACTIVE&amp;lt;/code&amp;gt; and may later call &amp;lt;code&amp;gt;VOP_RECLAIM&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 6. Integration with Poll/Select ===&lt;br /&gt;
&lt;br /&gt;
* Each vnode supporting streams or pseudo-filesystems exposes a &amp;lt;code&amp;gt;poll&amp;lt;/code&amp;gt; operation (&amp;lt;code&amp;gt;pipe_poll&amp;lt;/code&amp;gt; example).&lt;br /&gt;
* Vnode maintains pollheads (&amp;lt;code&amp;gt;pi_rpq&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pi_wpq&amp;lt;/code&amp;gt;) to manage sleeping readers/writers.&lt;br /&gt;
* Poll/select logic interacts directly with vnodes’ wait queues, using semaphores and SVs to wake sleeping processes.&lt;br /&gt;
* IRIX integrates select/poll tightly with its behavior layer: the &amp;lt;code&amp;gt;vnodeops&amp;lt;/code&amp;gt; dispatch ensures the correct filesystem or pseudo-device handles events.&lt;br /&gt;
&lt;br /&gt;
=== 7. Streams and Pseudo-Filesystems ===&lt;br /&gt;
&lt;br /&gt;
* Vnodes can represent STREAMS objects (&amp;lt;code&amp;gt;v_stream&amp;lt;/code&amp;gt;), which include pipes, ttys, sockets.&lt;br /&gt;
* Pseudo-filesystems like pipefs, fifofs, or STREAMS-based devices rely on vnodes for identity but do not implement persistent storage.&lt;br /&gt;
* Pipefs shows:&lt;br /&gt;
** Behavior insertion (&amp;lt;code&amp;gt;pipe_bhv&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Read/write/poll implemented at the vnode level&lt;br /&gt;
** Attribute, locking, and inactive handling integrated with BHV and semaphores&lt;br /&gt;
&lt;br /&gt;
=== 8. Key Semantic Takeaways vs. Solaris/OpenSolaris ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Feature&lt;br /&gt;
!IRIX&lt;br /&gt;
!Solaris / OpenSolaris&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Vnode abstraction&lt;br /&gt;
|Generic file object&lt;br /&gt;
|Generic file object&lt;br /&gt;
|Conceptually identical&lt;br /&gt;
|-&lt;br /&gt;
|Behavior Layer&lt;br /&gt;
|&amp;lt;code&amp;gt;v_bh&amp;lt;/code&amp;gt;, multiple behaviors&lt;br /&gt;
|VOP vector, shadow vnode&lt;br /&gt;
|IRIX allows stacking; Solaris uses layered vnode/shadow vnodes&lt;br /&gt;
|-&lt;br /&gt;
|VFS interface&lt;br /&gt;
|&amp;lt;code&amp;gt;vfsops_t&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;vfsops_t&amp;lt;/code&amp;gt;&lt;br /&gt;
|Almost identical; mount/unmount, sync, statvfs, vget&lt;br /&gt;
|-&lt;br /&gt;
|Vnode ops&lt;br /&gt;
|&amp;lt;code&amp;gt;vnodeops_t&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;vnodeops_t&amp;lt;/code&amp;gt;&lt;br /&gt;
|Nearly identical; both separate FS operations from global FS ops&lt;br /&gt;
|-&lt;br /&gt;
|Streams integration&lt;br /&gt;
|&amp;lt;code&amp;gt;v_stream&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;v_stream&amp;lt;/code&amp;gt; (STREAMS)&lt;br /&gt;
|Very similar; IRIX integrates tightly with select/poll via SVs/semaphores&lt;br /&gt;
|-&lt;br /&gt;
|Page/Buffer caching&lt;br /&gt;
|&amp;lt;code&amp;gt;v_dpages&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v_buf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v_pc&amp;lt;/code&amp;gt;&lt;br /&gt;
|Solaris uses &amp;lt;code&amp;gt;v_cache&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v_pages&amp;lt;/code&amp;gt;&lt;br /&gt;
|IRIX exposes more VM/buffer fields directly&lt;br /&gt;
|-&lt;br /&gt;
|Poll/select&lt;br /&gt;
|&amp;lt;code&amp;gt;pollhead&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sv_wait_sig&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;pollhead&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;selwait&amp;lt;/code&amp;gt;&lt;br /&gt;
|Both implement readiness/wakeup mechanisms; IRIX uses semaphores/SV directly&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 9. Summary ===&lt;br /&gt;
IRIX vnode/VFS system is:&lt;br /&gt;
&lt;br /&gt;
* Highly modular: behavior layers allow multiple filesystems and pseudo-filesystems to stack operations.&lt;br /&gt;
* Stream-aware: supports pipes, ttys, FIFOs, and sockets in a unified way.&lt;br /&gt;
* Poll/select integrated: readiness queues and SVs are part of each vnode.&lt;br /&gt;
* VM-aware: page cache, dirty pages, buffers, and delwri structures are exposed.&lt;br /&gt;
* Reference-counted: ensures proper lifecycle management via &amp;lt;code&amp;gt;inactive&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;reclaim&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenSolaris-like: almost all concepts map directly to Solaris VFS/vnode system.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Kernel: vnode Operations]]&lt;/div&gt;</summary>
		<author><name>Raion</name></author>
	</entry>
</feed>