diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-17 16:14:53 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-17 19:49:28 -0800 |
commit | 6115d0bcf8fee40ab9a98ff8068ea4d3bce5dbdb (patch) | |
tree | 98d5e85e591e366f268c6862ea2d3280e99a9317 | |
parent | 4399d160b1a688dfafdd3a470e16b34192bb70ee (diff) |
bcachefs: don't allocate sha256 tfm at mod init time
fails now due to link order
-rw-r--r-- | fs/bcachefs/Kconfig | 1 | ||||
-rw-r--r-- | fs/bcachefs/bcache.h | 1 | ||||
-rw-r--r-- | fs/bcachefs/checksum.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/fs-gc.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/fs.c | 2 | ||||
-rw-r--r-- | fs/bcachefs/str_hash.h | 9 | ||||
-rw-r--r-- | fs/bcachefs/super.c | 7 | ||||
-rw-r--r-- | fs/bcachefs/super.h | 1 |
8 files changed, 16 insertions, 17 deletions
diff --git a/fs/bcachefs/Kconfig b/fs/bcachefs/Kconfig index c8404477c52e..cdd848f1e4a6 100644 --- a/fs/bcachefs/Kconfig +++ b/fs/bcachefs/Kconfig @@ -6,7 +6,6 @@ config BCACHE_FS select EXPORTFS select CLOSURES select LIBCRC32C - select CRYPTO_SHA1 select FS_POSIX_ACL select LZ4_COMPRESS select LZ4_DECOMPRESS diff --git a/fs/bcachefs/bcache.h b/fs/bcachefs/bcache.h index d32d092b459c..09e5de351dfb 100644 --- a/fs/bcachefs/bcache.h +++ b/fs/bcachefs/bcache.h @@ -717,6 +717,7 @@ struct bch_fs { struct mutex zlib_workspace_lock; mempool_t compression_bounce[2]; + struct crypto_shash *sha256; struct crypto_blkcipher *chacha20; struct crypto_shash *poly1305; diff --git a/fs/bcachefs/checksum.c b/fs/bcachefs/checksum.c index b96050dbb381..30928ba1e252 100644 --- a/fs/bcachefs/checksum.c +++ b/fs/bcachefs/checksum.c @@ -562,6 +562,8 @@ void bch_fs_encryption_exit(struct bch_fs *c) crypto_free_shash(c->poly1305); if (!IS_ERR_OR_NULL(c->chacha20)) crypto_free_blkcipher(c->chacha20); + if (!IS_ERR_OR_NULL(c->sha256)) + crypto_free_shash(c->sha256); } int bch_fs_encryption_init(struct bch_fs *c) @@ -570,6 +572,10 @@ int bch_fs_encryption_init(struct bch_fs *c) struct bch_key key; int ret; + c->sha256 = crypto_alloc_shash("sha256", 0, 0); + if (IS_ERR(c->sha256)) + return PTR_ERR(c->sha256); + crypt = bch_sb_get_crypt(c->disk_sb); if (!crypt) return 0; diff --git a/fs/bcachefs/fs-gc.c b/fs/bcachefs/fs-gc.c index 1f6a65ecee99..f718c3d6665a 100644 --- a/fs/bcachefs/fs-gc.c +++ b/fs/bcachefs/fs-gc.c @@ -39,7 +39,7 @@ static int remove_dirent(struct bch_fs *c, struct btree_iter *iter, if (ret) goto err; - dir_hash_info = bch_hash_info_init(&dir_inode); + dir_hash_info = bch_hash_info_init(c, &dir_inode); ret = bch_dirent_delete(c, dir_inum, &dir_hash_info, &name, NULL); err: @@ -52,7 +52,7 @@ static int reattach_inode(struct bch_fs *c, u64 inum) { struct bch_hash_info lostfound_hash_info = - bch_hash_info_init(lostfound_inode); + bch_hash_info_init(c, lostfound_inode); struct bkey_inode_buf packed; char name_buf[20]; struct qstr name; @@ -308,7 +308,7 @@ static int check_lostfound(struct bch_fs *c, { struct qstr lostfound = QSTR("lost+found"); struct bch_hash_info root_hash_info = - bch_hash_info_init(root_inode); + bch_hash_info_init(c, root_inode); struct bkey_inode_buf packed; u64 inum; int ret; diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index f1125a32239f..f45babd7fd2e 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -1051,7 +1051,7 @@ static void bch_vfs_inode_init(struct bch_fs *c, inode->i_ctime = bch_time_to_timespec(c, bi->i_ctime); bch_inode_flags_to_vfs(inode); - ei->str_hash = bch_hash_info_init(bi); + ei->str_hash = bch_hash_info_init(c, bi); inode->i_mapping->a_ops = &bch_address_space_operations; diff --git a/fs/bcachefs/str_hash.h b/fs/bcachefs/str_hash.h index 1173dfe8e554..69be5255a5de 100644 --- a/fs/bcachefs/str_hash.h +++ b/fs/bcachefs/str_hash.h @@ -19,7 +19,8 @@ struct bch_hash_info { }; static inline struct bch_hash_info -bch_hash_info_init(const struct bch_inode_unpacked *bi) +bch_hash_info_init(struct bch_fs *c, + const struct bch_inode_unpacked *bi) { /* XXX ick */ struct bch_hash_info info = { @@ -33,10 +34,10 @@ bch_hash_info_init(const struct bch_inode_unpacked *bi) info.crc_key = bi->i_hash_seed; break; case BCH_STR_HASH_SIPHASH: { - SHASH_DESC_ON_STACK(desc, bch_sha256); - u8 digest[crypto_shash_digestsize(bch_sha256)]; + SHASH_DESC_ON_STACK(desc, c->sha256); + u8 digest[crypto_shash_digestsize(c->sha256)]; - desc->tfm = bch_sha256; + desc->tfm = c->sha256; desc->flags = 0; crypto_shash_digest(desc, (void *) &bi->i_hash_seed, diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index 509a80eae474..8f2c6b3fb419 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -67,7 +67,6 @@ static DEFINE_MUTEX(bch_fs_list_lock); static DECLARE_WAIT_QUEUE_HEAD(bch_read_only_wait); struct workqueue_struct *bcache_io_wq; -struct crypto_shash *bch_sha256; static void bch_dev_free(struct bch_dev *); static int bch_dev_alloc(struct bch_fs *, unsigned); @@ -1999,8 +1998,6 @@ static void bcache_exit(void) kset_unregister(bcache_kset); if (bcache_io_wq) destroy_workqueue(bcache_io_wq); - if (!IS_ERR_OR_NULL(bch_sha256)) - crypto_free_shash(bch_sha256); unregister_reboot_notifier(&reboot); } @@ -2016,10 +2013,6 @@ static int __init bcache_init(void) register_reboot_notifier(&reboot); bkey_pack_test(); - bch_sha256 = crypto_alloc_shash("sha256", 0, 0); - if (IS_ERR(bch_sha256)) - goto err; - if (!(bcache_io_wq = create_freezable_workqueue("bcache_io")) || !(bcache_kset = kset_create_and_add("bcache", NULL, fs_kobj)) || sysfs_create_files(&bcache_kset->kobj, files) || diff --git a/fs/bcachefs/super.h b/fs/bcachefs/super.h index 494e3c66ebdb..f676d2cb2e43 100644 --- a/fs/bcachefs/super.h +++ b/fs/bcachefs/super.h @@ -125,7 +125,6 @@ const char *bch_fs_open(char * const *, unsigned, struct bch_opts, const char *bch_fs_open_incremental(const char *path); extern struct workqueue_struct *bcache_io_wq; -extern struct crypto_shash *bch_sha256; extern struct kobj_type bch_fs_ktype; extern struct kobj_type bch_fs_internal_ktype; |