4 ms·
memfd_create() does not create an inode. It only creates a file descriptor. With a file descriptor you can create multiple mappings to the same physical addres
by geocar 10y ago
memfd_create() does not create an inode. It only creates a file descriptor.
With a file descriptor you can create multiple mappings to the same physical address -- something otherwise impossible on UNIX or Linux (although mach allows you to vm_remap[1] which is often sufficient).
[1]: http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/vm_remap.html http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/vm_remap...
- JoshTriplett 10y ago> memfd_create() does not create an inode. It only creates a file descriptor. It creates both; memfd_create (and timerfd_create, signalfd, eventfd, userfaultfd, epoll, and others) use a kernel subsystem called "anon_inode" to create an in-memory inode to back the file descriptor.
- JoshTriplett 10y ago(Minor correction: memfd_create creates an in-memory inode without using anon_inode, while the various other syscalls use anon_inode.)
- cyphar 10y agoIt creates a full inode using shmem[1], which eventually goes to ramfs[2]. It's a real inode in every sense of the word. [1]: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.2#L2949 http://lxr.free-electrons.com/source/mm/shmem.c?v=4.2#L2949 [2]: http://lxr.free-electrons.com/source/fs/ramfs/inode.c?v=4.2#L53 http://lxr.free-electrons.com/source/fs/ramfs/inode.c?v=4.2#...
- geocar 10y agoI have been indelicate: What Linux calls an "struct inode" is not what UNIX traditionally called an inode[1], and I meant the latter without perhaps enough specificity. [1]: https://en.wikipedia.org/wiki/Inode https://en.wikipedia.org/wiki/Inode