int logfs_init_journal(struct super_block *sb) { struct logfs_super *super = logfs_super(sb); size_t bufsize = max_t(size_t, sb->s_blocksize, super->s_writesize) + MAX_JOURNAL_HEADER; int ret = -ENOMEM; mutex_init(&super->s_journal_mutex); btree_init_mempool32(&super->s_reserved_segments, super->s_btree_pool); super->s_je = kzalloc(bufsize, GFP_KERNEL); if (!super->s_je) return ret; super->s_compressed_je = kzalloc(bufsize, GFP_KERNEL); if (!super->s_compressed_je) return ret; super->s_master_inode = logfs_new_meta_inode(sb, LOGFS_INO_MASTER); if (IS_ERR(super->s_master_inode)) return PTR_ERR(super->s_master_inode); ret = logfs_read_journal(sb); if (ret) return -EIO; reserve_sb_and_journal(sb); logfs_calc_free(sb); super->s_journal_area->a_ops = &journal_area_ops; return 0; }
struct inode *logfs_read_meta_inode(struct super_block *sb, u64 ino) { struct inode *inode; int err; inode = logfs_new_meta_inode(sb, ino); if (IS_ERR(inode)) return inode; err = logfs_read_inode(inode); if (err) { iput(inode); return ERR_PTR(err); } logfs_inode_setops(inode); return inode; }