summaryrefslogtreecommitdiffstats
path: root/fs/coda/cnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/coda/cnode.c')
-rw-r--r--fs/coda/cnode.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/fs/coda/cnode.c b/fs/coda/cnode.c
index 88e954eeb..47f853c14 100644
--- a/fs/coda/cnode.c
+++ b/fs/coda/cnode.c
@@ -25,6 +25,12 @@ inline int coda_fideq(ViceFid *fid1, ViceFid *fid2)
return 1;
}
+static struct inode_operations coda_symlink_inode_operations = {
+ readlink: page_readlink,
+ follow_link: page_follow_link,
+ setattr: coda_notify_change,
+};
+
/* cnode.c */
static void coda_fill_inode(struct inode *inode, struct coda_vattr *attr)
{
@@ -35,12 +41,14 @@ static void coda_fill_inode(struct inode *inode, struct coda_vattr *attr)
coda_vattr_to_iattr(inode, attr);
- if (S_ISREG(inode->i_mode))
+ if (S_ISREG(inode->i_mode)) {
inode->i_op = &coda_file_inode_operations;
- else if (S_ISDIR(inode->i_mode))
+ inode->i_fop = &coda_file_operations;
+ } else if (S_ISDIR(inode->i_mode)) {
inode->i_op = &coda_dir_inode_operations;
- else if (S_ISLNK(inode->i_mode)) {
- inode->i_op = &page_symlink_inode_operations;
+ inode->i_fop = &coda_dir_operations;
+ } else if (S_ISLNK(inode->i_mode)) {
+ inode->i_op = &coda_symlink_inode_operations;
inode->i_data.a_ops = &coda_symlink_aops;
} else
init_special_inode(inode, inode->i_mode, attr->va_rdev);
@@ -259,6 +267,7 @@ int coda_cnode_makectl(struct inode **inode, struct super_block *sb)
*inode = iget(sb, CTL_INO);
if ( *inode ) {
(*inode)->i_op = &coda_ioctl_inode_operations;
+ (*inode)->i_fop = &coda_ioctl_operations;
(*inode)->i_mode = 00444;
error = 0;
} else {