fscrypt: adjust logging for in-creation inodes
authorEric Biggers <ebiggers@google.com>
Thu, 17 Sep 2020 04:11:29 +0000 (21:11 -0700)
committerEric Biggers <ebiggers@google.com>
Tue, 22 Sep 2020 13:48:38 +0000 (06:48 -0700)
Now that a fscrypt_info may be set up for inodes that are currently
being created and haven't yet had an inode number assigned, avoid
logging confusing messages about "inode 0".

Acked-by: Jeff Layton <jlayton@kernel.org>
Link: https://lore.kernel.org/r/20200917041136.178600-7-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
fs/crypto/crypto.c
fs/crypto/keyring.c

index 9212325763b0f3ed9b41b0266f53b0205ef9ce9e..4ef3f714046aac83c642fa6d17d0c14736acdd48 100644 (file)
@@ -343,9 +343,11 @@ void fscrypt_msg(const struct inode *inode, const char *level,
        va_start(args, fmt);
        vaf.fmt = fmt;
        vaf.va = &args;
-       if (inode)
+       if (inode && inode->i_ino)
                printk("%sfscrypt (%s, inode %lu): %pV\n",
                       level, inode->i_sb->s_id, inode->i_ino, &vaf);
+       else if (inode)
+               printk("%sfscrypt (%s): %pV\n", level, inode->i_sb->s_id, &vaf);
        else
                printk("%sfscrypt: %pV\n", level, &vaf);
        va_end(args);
index e74f239c44280e2a0beea740531f237b459d7846..53cc552a7b8fd31107e18ea346afc327350d9a96 100644 (file)
@@ -817,6 +817,7 @@ static int check_for_busy_inodes(struct super_block *sb,
        struct list_head *pos;
        size_t busy_count = 0;
        unsigned long ino;
+       char ino_str[50] = "";
 
        spin_lock(&mk->mk_decrypted_inodes_lock);
 
@@ -838,11 +839,15 @@ static int check_for_busy_inodes(struct super_block *sb,
        }
        spin_unlock(&mk->mk_decrypted_inodes_lock);
 
+       /* If the inode is currently being created, ino may still be 0. */
+       if (ino)
+               snprintf(ino_str, sizeof(ino_str), ", including ino %lu", ino);
+
        fscrypt_warn(NULL,
-                    "%s: %zu inode(s) still busy after removing key with %s %*phN, including ino %lu",
+                    "%s: %zu inode(s) still busy after removing key with %s %*phN%s",
                     sb->s_id, busy_count, master_key_spec_type(&mk->mk_spec),
                     master_key_spec_len(&mk->mk_spec), (u8 *)&mk->mk_spec.u,
-                    ino);
+                    ino_str);
        return -EBUSY;
 }