prepare_parent_dentry(&parent_old, cache_dir);
cache_old_dentry = d_alloc(&parent_old, &dentry->d_name);
d_add(cache_old_dentry, cache_old_inode);
+ pre_smfs_inode(inode, cache_old_dentry->d_inode);
if (cache_dir->i_op->link)
rc = cache_dir->i_op->link(cache_old_dentry, cache_dir, cache_dentry);
cache_dentry = d_alloc(&parent, &dentry->d_name);
d_add(cache_dentry, cache_inode);
+ pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+ pre_smfs_inode(dir, cache_dir);
+
if (cache_dir->i_op->unlink)
rc = cache_dir->i_op->unlink(cache_dir, cache_dentry);
prepare_parent_dentry(&parent, cache_dir);
cache_dentry = d_alloc(&parent, &dentry->d_name);
+ pre_smfs_inode(dir, cache_dir);
lock_kernel();
if (cache_dir->i_op->mkdir)
rc = cache_dir->i_op->mkdir(cache_dir, cache_dentry, mode);
prepare_parent_dentry(&parent, cache_dir);
cache_dentry = d_alloc(&parent, &dentry->d_name);
d_add(cache_dentry, cache_inode);
-
igrab(cache_inode);
+ pre_smfs_inode(dir, cache_dir);
+ pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+
+
if (cache_dir->i_op->rmdir)
rc = cache_dir->i_op->rmdir(cache_dir, cache_dentry);
prepare_parent_dentry(&parent, cache_dir);
cache_dentry = d_alloc(&parent, &dentry->d_name);
+ pre_smfs_inode(dir, cache_dir);
+ pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+
if (cache_dir->i_op->mknod)
rc = cache_dir->i_op->mknod(cache_dir, cache_dentry, mode, rdev);
prepare_parent_dentry(&parent_new, cache_new_dir);
cache_new_dentry = d_alloc(&parent_new, &new_dentry->d_name);
+ pre_smfs_inode(old_dir, cache_old_dir) ;
+ pre_smfs_inode(new_dir, cache_new_dir);
+
if (cache_old_dir->i_op->rename)
rc = cache_old_dir->i_op->rename(cache_old_dir, cache_old_dentry,
cache_new_dir, cache_new_dentry);
smfs_prepare_cachefile(inode, filp, cache_inode,
&open_file, &open_dentry);
+ pre_smfs_inode(inode, cache_inode);
+
if (cache_inode->i_fop->write)
rc = cache_inode->i_fop->write(&open_file, buf, count, cache_ppos);
&open_file, &open_dentry);
+ pre_smfs_inode(inode, cache_inode);
if (cache_inode->i_fop->read)
rc = cache_inode->i_fop->read(&open_file, buf, count, cache_ppos);
smfs_prepare_cachefile(dentry->d_inode, file, cache_inode,
&open_file, &open_dentry);
+ pre_smfs_inode(dentry->d_inode, cache_inode);
if (cache_inode->i_fop->llseek)
rc = cache_inode->i_fop->llseek(&open_file, offset, origin);
if (cache_inode->i_mapping == &cache_inode->i_data)
inode->i_mapping = cache_inode->i_mapping;
+ pre_smfs_inode(inode, cache_inode);
if (cache_inode->i_fop->mmap)
rc = cache_inode->i_fop->mmap(&open_file, vma);
smfs_prepare_cachefile(inode, filp, cache_inode,
&open_file, &open_dentry);
+ pre_smfs_inode(inode, cache_inode);
if (cache_inode->i_fop->open)
rc = cache_inode->i_fop->open(cache_inode, &open_file);
smfs_prepare_cachefile(inode, filp, cache_inode,
&open_file, &open_dentry);
+ pre_smfs_inode(inode, cache_inode);
if (cache_inode->i_fop->release)
rc = cache_inode->i_fop->release(cache_inode, &open_file);
smfs_prepare_cachefile(inode, file, cache_inode,
&open_file, &open_dentry);
+ pre_smfs_inode(inode, cache_inode);
if (cache_inode->i_fop->fsync)
rc = cache_inode->i_fop->fsync(&open_file, &open_dentry, datasync);
void post_smfs_inode(struct inode *inode,
struct inode *cache_inode)
{
- duplicate_inode(inode, cache_inode);
- /*Here we must release the cache_inode,
- *Otherwise we will have no chance to
- *do it
- */
- cache_inode->i_state &=~I_LOCK;
+ if (inode && cache_inode) {
+ duplicate_inode(inode, cache_inode);
+ /*Here we must release the cache_inode,
+ *Otherwise we will have no chance to
+ *do it
+ */
+ cache_inode->i_state &=~I_LOCK;
+ }
}
void pre_smfs_inode(struct inode *inode,
struct inode *cache_inode)
{
- duplicate_inode(cache_inode, inode);
+ if (inode && cache_inode) {
+ duplicate_inode(cache_inode, inode);
+ }
}
static void smfs_read_inode(struct inode *inode)