- struct obdo *oa;
-
- ENTRY;
- oa = obdo_fromid(IID(inode), inode->i_ino,
- OBD_MD_FLNOTOBD | OBD_MD_FLBLOCKS);
- if ( IS_ERR(oa) ) {
- printk(__FUNCTION__ ": obdo_fromid failed\n");
- EXIT;
- return /* PTR_ERR(oa) */;
- }
-
- ODEBUG(oa);
- obdfs_to_inode(inode, oa);
- INIT_LIST_HEAD(obdfs_iplist(inode)); /* list of dirty pages on inode */
- INIT_LIST_HEAD(obdfs_islist(inode)); /* list of inodes in superblock */
-
- obdo_free(oa);
- /* OIDEBUG(inode); */
-
- if (S_ISREG(inode->i_mode)) {
- inode->i_op = &obdfs_file_inode_operations;
- EXIT;
- } else if (S_ISDIR(inode->i_mode)) {
- inode->i_op = &obdfs_dir_inode_operations;
- EXIT;
- } else if (S_ISLNK(inode->i_mode)) {
- inode->i_op = &obdfs_symlink_inode_operations;
- EXIT;
- } else {
- init_special_inode(inode, inode->i_mode,
- /* XXX need to fill in the ext2 side */
- ((long *)obdfs_i2info(inode)->oi_inline)[0]);
- }
-
- return;
+ struct obdo *oa;
+
+ ENTRY;
+ oa = obdo_fromid(IID(inode), inode->i_ino,
+ OBD_MD_FLNOTOBD | OBD_MD_FLBLOCKS);
+ if ( IS_ERR(oa) ) {
+ printk(__FUNCTION__ ": obdo_fromid failed\n");
+ EXIT;
+ return /* PTR_ERR(oa) */;
+ }
+
+ ODEBUG(oa);
+ obdfs_to_inode(inode, oa);
+ INIT_LIST_HEAD(obdfs_iplist(inode)); /* list of dirty pages on inode */
+ INIT_LIST_HEAD(obdfs_islist(inode)); /* list of inodes in superblock */
+
+ obdo_free(oa);
+ /* OIDEBUG(inode); */
+
+ if (S_ISREG(inode->i_mode)) {
+ inode->i_op = &obdfs_file_inode_operations;
+ inode->i_fop = &obdfs_file_operations;
+ inode->i_mapping->a_ops = &obdfs_aops;
+ EXIT;
+ } else if (S_ISDIR(inode->i_mode)) {
+ inode->i_op = &obdfs_dir_inode_operations;
+ inode->i_fop = &obdfs_dir_operations;
+ EXIT;
+ } else if (S_ISLNK(inode->i_mode)) {
+ if (inode->i_blocks) {
+ inode->i_op = &obdfs_symlink_inode_operations;
+ inode->i_mapping->a_ops = &obdfs_aops;
+ }else {
+ inode->i_op = &obdfs_fast_symlink_inode_operations;
+ }
+ EXIT;
+ } else {
+ init_special_inode(inode, inode->i_mode,
+ ((int *)obdfs_i2info(inode)->oi_inline)[0]);
+ }
+
+ return;