|
@@ -730,7 +730,10 @@ v9fs_vfs_create_dotl(struct inode *dir, struct dentry *dentry, int mode,
|
|
|
P9_DPRINTK(P9_DEBUG_VFS, "inode creation failed %d\n", err);
|
|
P9_DPRINTK(P9_DEBUG_VFS, "inode creation failed %d\n", err);
|
|
|
goto error;
|
|
goto error;
|
|
|
}
|
|
}
|
|
|
- dentry->d_op = &v9fs_cached_dentry_operations;
|
|
|
|
|
|
|
+ if (v9ses->cache)
|
|
|
|
|
+ dentry->d_op = &v9fs_cached_dentry_operations;
|
|
|
|
|
+ else
|
|
|
|
|
+ dentry->d_op = &v9fs_dentry_operations;
|
|
|
d_instantiate(dentry, inode);
|
|
d_instantiate(dentry, inode);
|
|
|
err = v9fs_fid_add(dentry, fid);
|
|
err = v9fs_fid_add(dentry, fid);
|
|
|
if (err < 0)
|
|
if (err < 0)
|
|
@@ -1128,6 +1131,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
|
|
v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
|
|
v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
|
|
|
generic_fillattr(dentry->d_inode, stat);
|
|
generic_fillattr(dentry->d_inode, stat);
|
|
|
|
|
|
|
|
|
|
+ p9stat_free(st);
|
|
|
kfree(st);
|
|
kfree(st);
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -1489,6 +1493,7 @@ static int v9fs_readlink(struct dentry *dentry, char *buffer, int buflen)
|
|
|
|
|
|
|
|
retval = strnlen(buffer, buflen);
|
|
retval = strnlen(buffer, buflen);
|
|
|
done:
|
|
done:
|
|
|
|
|
+ p9stat_free(st);
|
|
|
kfree(st);
|
|
kfree(st);
|
|
|
return retval;
|
|
return retval;
|
|
|
}
|
|
}
|
|
@@ -1942,7 +1947,7 @@ static const struct inode_operations v9fs_dir_inode_operations_dotu = {
|
|
|
.unlink = v9fs_vfs_unlink,
|
|
.unlink = v9fs_vfs_unlink,
|
|
|
.mkdir = v9fs_vfs_mkdir,
|
|
.mkdir = v9fs_vfs_mkdir,
|
|
|
.rmdir = v9fs_vfs_rmdir,
|
|
.rmdir = v9fs_vfs_rmdir,
|
|
|
- .mknod = v9fs_vfs_mknod_dotl,
|
|
|
|
|
|
|
+ .mknod = v9fs_vfs_mknod,
|
|
|
.rename = v9fs_vfs_rename,
|
|
.rename = v9fs_vfs_rename,
|
|
|
.getattr = v9fs_vfs_getattr,
|
|
.getattr = v9fs_vfs_getattr,
|
|
|
.setattr = v9fs_vfs_setattr,
|
|
.setattr = v9fs_vfs_setattr,
|