1 ========================== 2 Reference counting in pnfs 3 ========================== 4 5 The are several inter-related caches. We have 6 reference multiple devices, each of which can 7 Each data server can be referenced by multiple 8 can be referenced by multiple layouts. To keep 9 we need to reference count. 10 11 12 struct pnfs_layout_hdr 13 ====================== 14 15 The on-the-wire command LAYOUTGET corresponds 16 pnfs_layout_segment, usually referred to by th 17 Each nfs_inode may hold a pointer to a cache o 18 segments in nfsi->layout, of type struct pnfs_ 19 20 We reference the header for the inode pointing 21 outstanding RPC call that references it (LAYOU 22 LAYOUTCOMMIT), and for each lseg held within. 23 24 Each header is also (when non-empty) put on a 25 struct nfs_client (cl_layouts). Being put on 26 the reference count, as the layout is kept aro 27 keeps it in the list. 28 29 deviceid_cache 30 ============== 31 32 lsegs reference device ids, which are resolved 33 layout driver type. The device ids are held i 34 nfs4_deviceid_cache). The cache itself is ref 35 mount. The entries (struct nfs4_deviceid) the 36 the lifetime of each lseg referencing them. 37 38 RCU is used because the deviceid is basically 39 data structure. The hlist size of 32 buckets 40 justification, but seems reasonable given that 41 deviceid's per filesystem, and multiple filesy 42 43 The hash code is copied from the nfsd code bas 44 hashing and variations of this algorithm can b 45 <http://groups.google.com/group/comp.lang.c/br 46 47 data server cache 48 ================= 49 50 file driver devices refer to data servers, whi 51 level cache. Its reference is held over the l 52 pointing to it. 53 54 lseg 55 ==== 56 57 lseg maintains an extra reference correspondin 58 bit which holds it in the pnfs_layout_hdr's li 59 is removed from the pnfs_layout_hdr's list, th 60 bit is set, preventing any new lsegs from bein 61 62 layout drivers 63 ============== 64 65 PNFS utilizes what is called layout drivers. T 66 layout types: "files", "objects", "blocks", an 67 of these types there is a layout-driver with a 68 table which are called by the nfs-client pnfs- 69 different layout types. 70 71 Files-layout-driver code is in: fs/nfs/filelay 72 Blocks-layout-driver code is in: fs/nfs/blockl 73 Flexfiles-layout-driver code is in: fs/nfs/fle 74 75 blocks-layout setup 76 =================== 77 78 TODO: Document the setup needs of the blocks l
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.