Re: [f2fs-dev] [PATCH v2] f2fs: another way to set large folio by remembering inode number
Randy Dunlap <[email protected]>
| Newsgroups | org.kernel.vger.linux-api,net.sourceforge.lists.linux-f2fs-devel,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 5/25/26 6:10 PM, Jaegeuk Kim wrote: > On 05/22, Theodore Tso wrote: >> On Fri, May 22, 2026 at 05:08:41PM +0000, Jaegeuk Kim wrote: >>> >>> Thank you for the explanation. It seems I made a wrong assumption on the >>> usage of "user." prefix where each filesystem can support in different >>> ways. >> >> The "user." prefix is used by all userspace applications that wish to >> store extended attributes. For example, user.mime_type, >> user.xdg.origin_url, user.charset, user.appache_handler, etc >> >> For more information, see: >> >> https://www.freedesktop.org/wiki/CommonExtendedAttribute >> https://wiki.archlinux.org/title/Extended_attributes >> >> I certainly assumed this was common knowledge across all file system >> maintainers, but this was apparently not true in your case. I don't >> know how this could be the case given that f2fs implements extended >> attributes, and I would have thought you would have known that when >> testing that feature. >> >>> I shared some motivation when replying to Darrick's feedback [1], but yes, >>> it was not enough for all heads-up. The problem started that some speicific >>> application needs as many high-order pages as possible mostly for reads. So, >>> I thought we can turn on large folio on the specific files per hints. One way >>> for the hints was using immutable bit, but it turned out it's very hard to >>> manage disabling the bit whenever deleting the files. Along with limited >>> ioctl() and requiring inode eviction to manage large folio activation, I had >>> to implement this path. >>> >>> [1] https://lore.kernel.org/lkml/[email protected]/ >> >> Actually, you still haven't explained your use case, at least, not >> well enough for me to understand what you are trying to do. >> >> So an application wants a particular file to use as many high-order >> pages as possible. Why? What sort of guarantees do you need to >> provide? What happens if they can't be provided? What happens if a >> possibly malicious, or at least gready, application uses this >> interface to grab a lot of high-order pages? >> >> >From your patch: >> >> 1. setxattr(file, "user.fadvise", &value, sizeof(unsigned int), 0) >> -> register the inode number for large folio >> 2. chmod(0400, file) >> -> make Read-Only >> 3. open() >> -> f2fs_iget() with large folio >> 4. open(WRITE), mkwrite on mmap, chmod(WRITE) >> -> return error >> 5. iput() and open() >> -> goto #3 >> 6. unlink >> -> deregister the inode number >> >> Why should making the file read-only matter? And when you say >> "derigster the inode number", why should this be related to deleting >> the inode? >> >> This is an interface which seems to be very specific to your use case. >> What if those requirements change over time? What if you want pull in >> a file without making it be read-only? And what if you want to >> release the large-order pages without deleting the file? > > Let me try to write more details, helped with Gemini. [as an interested reader:] If this idea is so good, why shouldn't it be done in the VFS/MM so that other filesystems could do the same thing instead of just in f2fs? -- ~Randy