]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/crypto/crypto.c
Merge tag 'y2038-vfs' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground
[linux.git] / fs / crypto / crypto.c
index 45c3d0427fb253796457bf9591d32912be88a8e8..32a7ad0098cc28b7739d225e52d4898d812f939b 100644 (file)
@@ -141,7 +141,7 @@ void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
        memset(iv, 0, ci->ci_mode->ivsize);
        iv->lblk_num = cpu_to_le64(lblk_num);
 
-       if (ci->ci_flags & FS_POLICY_FLAG_DIRECT_KEY)
+       if (fscrypt_is_direct_key_policy(&ci->ci_policy))
                memcpy(iv->nonce, ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE);
 
        if (ci->ci_essiv_tfm != NULL)
@@ -188,10 +188,8 @@ int fscrypt_crypt_block(const struct inode *inode, fscrypt_direction_t rw,
                res = crypto_wait_req(crypto_skcipher_encrypt(req), &wait);
        skcipher_request_free(req);
        if (res) {
-               fscrypt_err(inode->i_sb,
-                           "%scryption failed for inode %lu, block %llu: %d",
-                           (rw == FS_DECRYPT ? "de" : "en"),
-                           inode->i_ino, lblk_num, res);
+               fscrypt_err(inode, "%scryption failed for block %llu: %d",
+                           (rw == FS_DECRYPT ? "De" : "En"), lblk_num, res);
                return res;
        }
        return 0;
@@ -453,7 +451,7 @@ int fscrypt_initialize(unsigned int cop_flags)
        return res;
 }
 
-void fscrypt_msg(struct super_block *sb, const char *level,
+void fscrypt_msg(const struct inode *inode, const char *level,
                 const char *fmt, ...)
 {
        static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
@@ -467,8 +465,9 @@ void fscrypt_msg(struct super_block *sb, const char *level,
        va_start(args, fmt);
        vaf.fmt = fmt;
        vaf.va = &args;
-       if (sb)
-               printk("%sfscrypt (%s): %pV\n", level, sb->s_id, &vaf);
+       if (inode)
+               printk("%sfscrypt (%s, inode %lu): %pV\n",
+                      level, inode->i_sb->s_id, inode->i_ino, &vaf);
        else
                printk("%sfscrypt: %pV\n", level, &vaf);
        va_end(args);
@@ -479,6 +478,8 @@ void fscrypt_msg(struct super_block *sb, const char *level,
  */
 static int __init fscrypt_init(void)
 {
+       int err = -ENOMEM;
+
        /*
         * Use an unbound workqueue to allow bios to be decrypted in parallel
         * even when they happen to complete on the same CPU.  This sacrifices
@@ -501,31 +502,19 @@ static int __init fscrypt_init(void)
        if (!fscrypt_info_cachep)
                goto fail_free_ctx;
 
+       err = fscrypt_init_keyring();
+       if (err)
+               goto fail_free_info;
+
        return 0;
 
+fail_free_info:
+       kmem_cache_destroy(fscrypt_info_cachep);
 fail_free_ctx:
        kmem_cache_destroy(fscrypt_ctx_cachep);
 fail_free_queue:
        destroy_workqueue(fscrypt_read_workqueue);
 fail:
-       return -ENOMEM;
-}
-module_init(fscrypt_init)
-
-/**
- * fscrypt_exit() - Shutdown the fs encryption system
- */
-static void __exit fscrypt_exit(void)
-{
-       fscrypt_destroy();
-
-       if (fscrypt_read_workqueue)
-               destroy_workqueue(fscrypt_read_workqueue);
-       kmem_cache_destroy(fscrypt_ctx_cachep);
-       kmem_cache_destroy(fscrypt_info_cachep);
-
-       fscrypt_essiv_cleanup();
+       return err;
 }
-module_exit(fscrypt_exit);
-
-MODULE_LICENSE("GPL");
+late_initcall(fscrypt_init)