|
|
@@ -156,10 +156,26 @@ static void __logfs_destroy_inode(struct inode *inode)
|
|
|
call_rcu(&inode->i_rcu, logfs_i_callback);
|
|
|
}
|
|
|
|
|
|
+static void __logfs_destroy_meta_inode(struct inode *inode)
|
|
|
+{
|
|
|
+ struct logfs_inode *li = logfs_inode(inode);
|
|
|
+ BUG_ON(li->li_block);
|
|
|
+ call_rcu(&inode->i_rcu, logfs_i_callback);
|
|
|
+}
|
|
|
+
|
|
|
static void logfs_destroy_inode(struct inode *inode)
|
|
|
{
|
|
|
struct logfs_inode *li = logfs_inode(inode);
|
|
|
|
|
|
+ if (inode->i_ino < LOGFS_RESERVED_INOS) {
|
|
|
+ /*
|
|
|
+ * The reserved inodes are never destroyed unless we are in
|
|
|
+ * unmont path.
|
|
|
+ */
|
|
|
+ __logfs_destroy_meta_inode(inode);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
BUG_ON(list_empty(&li->li_freeing_list));
|
|
|
spin_lock(&logfs_inode_lock);
|
|
|
li->li_refcount--;
|