do_inode_permission(9)
π do_inode_permission(9) β from the Kernel API Manual, bestie
Okay so picture this: you're in the kernel, you need a permission check, and you want it fast. This is that function. Let's get into it π«Ά
β¨ NAME β¨
do_inode_permission β literally just UNIX permission checking, no cap π
πΈ SYNOPSIS πΈ
int do_inode_permission (struct mnt_idmap *idmap , struct inode *inode ,
int mask );
Three args, one int back. Clean. Iconic. We love a signature that doesn't overstay its welcome β¨
π ARGUMENTS π
idmapβ the idmap of the mount that thisinodewas found from. like, which mount family it belongs to, yk? π¦inodeβ the actual inode we're checking permissions on. this is the main character here πmaskβ which right(s) you're checking for β thinkMAY_READ,MAY_WRITE,MAY_EXEC... that whole squad π«
π DESCRIPTION π
So here's the vibe: we _really_ want to just call generic_permission without even looking at the inode->i_op values. Like, why are we even checking, right? π
The way we pull this off is by keeping a cache flag in inode->i_opflags that basically says:
"this has not special permission function, use the fast case" β‘
Translation bestie: if that flag's set, we skip the whole investigation and go straight to the fast path. No detours, no drama, just speed ποΈβ¨
π¦ SEE ALSO π¦
Everything's in the kernel file ./fs/namei.c β here's the whole friend group, no one left out fr fr:
check_acl(9)acl_permission_check(9)generic_permission(9)sb_permission(9)inode_permission(9)path_get(9)path_put(9)path_connected(9)try_to_unlazy(9)try_to_unlazy_next(9)complete_walk(9)may_follow_link(9)safe_hardlink_source(9)may_linkat(9)may_create_in_sticky(9)lookup_fast(9)start_dirop(9)end_dirop(9)kern_path_parent(9)vfs_path_parent_lookup(9)vfs_path_lookup(9)try_lookup_noperm(9)lookup_noperm(9)lookup_one(9)lookup_one_unlocked(9)lookup_one_positive_killable(9)lookup_one_positive_unlocked(9)lookup_noperm_unlocked(9)start_creating(9)start_removing(9)start_creating_killable(9)start_removing_killable(9)start_creating_noperm(9)start_removing_noperm(9)start_creating_dentry(9)start_removing_dentry(9)__start_renaming(9)start_renaming(9)start_renaming_dentry(9)start_renaming_two_dentries(9)vfs_prepare_mode(9)vfs_create(9)atomic_open(9)vfs_lookup_open(9)vfs_tmpfile(9)kernel_tmpfile_open(9)end_creating_path(9)dentry_create(9)vfs_mknod(9)vfs_mkdir(9)vfs_rmdir(9)vfs_unlink(9)vfs_symlink(9)vfs_link(9)vfs_rename(9)vfs_readlink(9)vfs_get_link(9)page_get_link(9)page_put_link(9)
ngl bestie, if you're poking at i_opflags yourself, pls be careful β the fast case is only fast because that flag tells the truth π
π and that's the page!! brought to you by ./fs, dated October 2026 β mwah, read it again whenever you forget how the fast path works ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms