From: Al Viro Date: Wed, 2 Jul 2025 07:33:02 +0000 (-0400) Subject: nfsd_get_inode(): lift setting ->i_{,f}op to callers. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92003056e5d45f0f32a87f9f96d15902f2f21fbf;p=thirdparty%2Fkernel%2Fstable.git nfsd_get_inode(): lift setting ->i_{,f}op to callers. Reviewed-by: NeilBrown Reviewed-by: Jeff Layton Signed-off-by: Al Viro --- diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c index 6deabe359a804..c19a74a36c450 100644 --- a/fs/nfsd/nfsctl.c +++ b/fs/nfsd/nfsctl.c @@ -1103,27 +1103,14 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size) * populating the filesystem. */ -/* Basically copying rpc_get_inode. */ static struct inode *nfsd_get_inode(struct super_block *sb, umode_t mode) { struct inode *inode = new_inode(sb); - if (!inode) - return NULL; - /* Following advice from simple_fill_super documentation: */ - inode->i_ino = iunique(sb, NFSD_MaxReserved); - inode->i_mode = mode; - simple_inode_init_ts(inode); - switch (mode & S_IFMT) { - case S_IFDIR: - inode->i_fop = &simple_dir_operations; - inode->i_op = &simple_dir_inode_operations; - inc_nlink(inode); - break; - case S_IFLNK: - inode->i_op = &simple_symlink_inode_operations; - break; - default: - break; + if (inode) { + /* Following advice from simple_fill_super documentation: */ + inode->i_ino = iunique(sb, NFSD_MaxReserved); + inode->i_mode = mode; + simple_inode_init_ts(inode); } return inode; } @@ -1143,6 +1130,9 @@ static struct dentry *nfsd_mkdir(struct dentry *parent, struct nfsdfs_client *nc iput(inode); return dentry; } + inode->i_fop = &simple_dir_operations; + inode->i_op = &simple_dir_inode_operations; + inc_nlink(inode); if (ncl) { inode->i_private = ncl; kref_get(&ncl->cl_ref); @@ -1176,6 +1166,7 @@ static void _nfsd_symlink(struct dentry *parent, const char *name, return; } + inode->i_op = &simple_symlink_inode_operations; inode->i_link = (char *)content; inode->i_size = strlen(content);