{"id":432,"date":"2020-08-18T19:23:47","date_gmt":"2020-08-18T20:23:47","guid":{"rendered":"http:\/\/www.linux-tutorial.info\/?page_id=77"},"modified":"2020-08-22T19:26:40","modified_gmt":"2020-08-22T20:26:40","slug":"this-is-the-page-title-toplevel-265","status":"publish","type":"page","link":"http:\/\/www.linux-tutorial.info\/?page_id=432","title":{"rendered":"The VFS Inode Cache"},"content":{"rendered":"\n<title>The VFS Inode Cache<\/title>\n<p>\nAs the mounted file systems are navigated, their VFS inodes are being continually\nread and, in some cases, written.\nThe Virtual File System maintains an inode cache to speed up accesses to all of\nthe mounted file systems.\nEvery time a VFS inode is read from the inode cache the system saves an access to\na physical device.\n<p>\nThe VFS inode cache is implmented as a hash table whose entries are pointers to\nlists of VFS inodes that have the same hash value.\nThe hash value of an inode is calculated from its inode number and from the device\nidentifier for the underlying physical device containing the file system.\nWhenever the Virtual File System needs to access an inode, it first looks in the\nVFS inode cache.\nTo find an inode in the cache, the system first calculates its hash value and then uses\nit as an index into the inode hash table.\nThis gives it a pointer to a list of inodes with the same hash value.\nIt then reads each inode in turn until it finds one with both the same inode\nnumber and the same device identifier as the one that it is searching for.\n<p>\nIf it can find the inode in the cache, its count is incremented to show that it\nhas another user and the file system access continues.\nOtherwise a free VFS inode must be found so that the file system can read the\ninode from memory.\nVFS has a number of choices about how to get a free inode.\nIf the system may allocate more VFS inodes then this is what it does; it\nallocates kernel pages and breaks them up into new, free, inodes and puts them\ninto the inode list.\nAll of the system&#8217;s VFS inodes are in a list pointed at by <tt>first_inode<\/tt> as well\nas in the inode hash table.\nIf the system already has all of the inodes that it is allowed to have, it must\nfind an inode that is a good candidate to be reused.\nGood candidates are inodes with a usage count of zero; this indicates that the\nsystem is not currently using them.\nReally important VFS inodes, for example the root inodes of file systems always have\na usage count greater than zero and so are never candidates for reuse.\nOnce a candidate for reuse has been located it is cleaned up.\nThe VFS inode might be dirty and in this case it needs to be written back to the file system\nor it might be locked and in this case the system must wait for it to be unlocked before\ncontinuing.\nThe candidate VFS inode must be cleaned up before it can be reused.\n<p>\nHowever the new VFS inode is found, a file system specific routine must be called\nto fill it out from information read from the underlying real file system.\nWhilst it is being filled out, the new VFS inode has a usage count of one and is\nlocked so that nothing else accesses it until it contains valid information.\n<p>\nTo get the VFS inode that is actually needed, the file system may need to access\nseveral other inodes.\nThis happens when you read a directory; only the inode for the final directory is\nneeded but the inodes for the intermediate directories must also be read.\nAs the VFS inode cache is used and filled up, the less used inodes will be discarded\nand the more used inodes will remain in the cache.\n<p>\n","protected":false},"excerpt":{"rendered":"<p>The VFS Inode Cache As the mounted file systems are navigated, their VFS inodes are being continually read and, in some cases, written. The Virtual File System maintains an inode cache to speed up accesses to all of the mounted &hellip; <a href=\"http:\/\/www.linux-tutorial.info\/?page_id=432\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-432","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/pages\/432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=432"}],"version-history":[{"count":1,"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/pages\/432\/revisions"}],"predecessor-version":[{"id":760,"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=\/wp\/v2\/pages\/432\/revisions\/760"}],"wp:attachment":[{"href":"http:\/\/www.linux-tutorial.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}