Whamcloud - gitweb
b=3869,1742
[fs/lustre-release.git] / lustre / smfs / smfs_internal.h
index 7da1b7e..cb5862a 100644 (file)
@@ -131,7 +131,6 @@ extern int init_smfs(void);
 extern int cleanup_smfs(void);
 extern void smfs_put_super(struct super_block *sb);
 extern struct super_block *smfs_get_sb_by_path(char *path, int len);
-extern struct vfsmount* get_vfsmount(struct super_block *sb);
 /*sysctl.c*/
 extern int sm_debug_level;
 extern int sm_inodes;
@@ -182,9 +181,6 @@ extern int smfs_rec_unpack(struct smfs_proc_args *args, char *record,
                            char **pbuf, int *opcode);
 extern int smfs_process_rec(struct super_block *sb, int count,
                             char *dir, int flags);
-extern void smfs_rec_pack(struct update_record *rec,
-                          struct inode *dst, void* data, int op);
-
 extern smfs_pack_rec_func smfs_get_rec_pack_type(struct super_block *sb);
 
 extern int ost_rec_pack_init(struct super_block *sb);
@@ -199,6 +195,7 @@ extern int smfs_llog_add_rec(struct smfs_super_info * sinfo, void *data,
 /*ioctl.c*/
 extern int init_smfs_psdev(void);
 extern void smfs_cleanup_psdev(void);
+/*smfs_cow.c */
 
 /* cache_space.c */
 extern int do_cache_manage;
@@ -286,14 +283,21 @@ static inline int get_active_entry(struct inode *dir, __u64 *active_entry)
 
 #define CACHE_HOOK_MAX          9
 
-#define SMFS_CACHE_HOOK_PRE(op, handle, dir)                            \
-{                                                                       \
-        if (smfs_cache_hook(dir)) {                                     \
-                LASSERT(handle != NULL);                                \
-                CDEBUG(D_INODE, "cache hook pre: op %d, dir %lu\n",     \
-                       op, dir->i_ino);                                 \
-                cache_space_pre(dir, op);                               \
-        }                                                               \
+#define SMFS_CACHE_HOOK_PRE(op, handle, dir, rc)                                \
+{                                                                               \
+        while (smfs_cache_hook(dir)) {                                          \
+                if (!handle) {                                                  \
+                        handle = smfs_trans_start(dir, KML_CACHE_NOOP, NULL);   \
+                        if (IS_ERR(handle)) {                                   \
+                               rc = -ENOSPC;                                    \
+                               break;                                           \
+                        }                                                       \
+                }                                                               \
+                CDEBUG(D_INODE, "cache hook pre: op %d, dir %lu\n",             \
+                       op, dir->i_ino);                                         \
+                cache_space_pre(dir, op);                                       \
+                break;                                                          \
+        }                                                                       \
 }
 
 #define SMFS_CACHE_HOOK_POST(op, handle, old_dir, old_dentry,           \
@@ -309,6 +313,25 @@ static inline int get_active_entry(struct inode *dir, __u64 *active_entry)
                         GOTO(label, rc);                                \
         }                                                               \
 }
+#if CONFIG_SNAPFS
+/*snap macros*/
+#define SMFS_PRE_COW(dir, dentry, new_dir, new_dentry, op, name, rc, label)    \
+do {                                                                           \
+        if (smfs_do_cow(dir) && !rc) {                                         \
+                CDEBUG(D_INODE, "Do %s snap post for dir %lu \n",              \
+                              name, dir->i_ino);                               \
+                rc = smfs_cow(dir, dentry, new_dir, new_dentry, op);           \
+                if (rc)                                                        \
+                        GOTO(label, rc);                                       \
+        }                                                                      \
+} while(0)
+
+extern int smfs_cow_init(struct super_block *sb);
+extern int smfs_cow_cleanup(struct super_block *sb);
+extern int smfs_init_snap_inode_info(struct inode *inode, int flags);
+#else
+#define SMFS_PRE_COW(dir, dentry, new_dir, new_dentry, op, name, rc, label)                 
+#endif 
 
 #endif /*__KERNEL*/
 #endif /* __LINUX_SMFS_H */