4 * A snap shot file system.
8 #define DEBUG_SUBSYSTEM S_SM
10 #include <linux/kmod.h>
11 #include <linux/init.h>
13 #include <linux/slab.h>
14 #include <linux/string.h>
15 #include "smfs_internal.h"
17 static void duplicate_inode(struct inode *cache_inode, struct inode *inode)
20 inode->i_mode = cache_inode->i_mode;
21 inode->i_uid = cache_inode->i_uid;
22 inode->i_gid = cache_inode->i_gid;
24 inode->i_nlink = cache_inode->i_nlink;
25 inode->i_size = cache_inode->i_size;
26 inode->i_atime = cache_inode->i_atime;
27 inode->i_ctime = cache_inode->i_ctime;
28 inode->i_mtime = cache_inode->i_mtime;
29 inode->i_blksize = cache_inode->i_blksize; /* This is the optimal IO size
30 * (for stat), not the fs block
32 inode->i_blocks = cache_inode->i_blocks;
33 inode->i_version = cache_inode->i_version;
35 static void smfs_read_inode(struct inode *inode)
37 struct super_block *cache_sb;
38 struct inode *cache_inode;
44 CDEBUG(D_INODE, "read_inode ino %lu\n", inode->i_ino);
45 cache_sb = S2CSB(inode->i_sb);
47 cache_inode = iget(cache_sb, inode->i_ino);
48 I2CI(inode) = cache_inode;
50 if(cache_sb && cache_sb->s_op->read_inode)
51 cache_sb->s_op->read_inode(cache_inode);
53 CDEBUG(D_INODE, "read_inode ino %lu icount %d \n",
54 inode->i_ino, atomic_read(&inode->i_count));
56 duplicate_inode(cache_inode, inode);
57 sm_set_inode_ops(cache_inode, inode);
59 CDEBUG(D_INODE, "read_inode ino %lu icount %d \n",
60 inode->i_ino, atomic_read(&inode->i_count));
64 /* Although some filesystem(such as ext3) do not have
65 * clear_inode method, but we need it to free the
68 static void smfs_clear_inode(struct inode *inode)
70 struct super_block *cache_sb;
71 struct inode *cache_inode;
77 cache_sb = S2CSB(inode->i_sb);
78 cache_inode = I2CI(inode);
79 clear_inode(cache_inode);
83 struct super_operations smfs_super_ops = {
84 read_inode: smfs_read_inode,
85 clear_inode: smfs_clear_inode,
86 put_super: smfs_put_super,