ecryptfs: make show_options reflect actual mount options
PATCH 1/1 ecryptfs: make show_options reflect actual mount options
Change ecryptfs_show_options to reflect the actual mount options in use. Note that this does away with the "dir=" output, which is not a valid mount option and appears to be unused.
Mount options such as "ecryptfs_verbose" and "ecryptfs_xattr_metadata" are somewhat indeterminate for a given fs, but in any case the reported mount options can be used in a new mount command to get the same behavior.
Signed-off-by Eric Sandeen <[email protected]>
Acked-by Michael Halcrow <[email protected]>
---
fs/ecryptfs/super.c +31 -21
@@ -157,32 +157,42 @@ static void ecryptfs_clear_inode(struct/** * ecryptfs_show_options * -* Prints the directory we are currently mounted over. -* Returns zero on success; non-zero otherwise +* Prints the mount options for a given superblock. +* Returns zero; does not fail. */ static int ecryptfs_show_options (struct seq_file *m,struct vfsmount *mnt) {struct super_block *sb = mnt->mnt_sb; -struct dentry *lower_root_dentry =ecryptfs_dentry_to_lower (sb->s_root); -struct vfsmount *lower_mnt =ecryptfs_dentry_to_lower_mnt (sb->s_root); -char *tmp_page; -char *path; -int rc =0 ; - - tmp_page = (char *)__get_free_page (GFP_KERNEL ); -if (!tmp_page) { - rc = -ENOMEM ; - goto out; - } - path =d_path (lower_root_dentry, lower_mnt, tmp_page,PAGE_SIZE ); -if (IS_ERR (path)) { - rc =PTR_ERR (path); - goto out; +struct ecryptfs_mount_crypt_stat *mount_crypt_stat = + &ecryptfs_superblock_to_private (sb)->mount_crypt_stat; +struct ecryptfs_global_auth_tok *walker; + +mutex_lock (&mount_crypt_stat->global_auth_tok_list_mutex); +list_for_each_entry (walker, + &mount_crypt_stat->global_auth_tok_list, + mount_crypt_stat_list) { +seq_printf (m,",ecryptfs_sig=%s" , walker->sig); } -seq_printf (m,",dir=%s" , path); -free_page ((unsigned long )tmp_page); -out: -return rc; +mutex_unlock (&mount_crypt_stat->global_auth_tok_list_mutex); + +/* Note this is global and probably shouldn't be a mount option */ +if (ecryptfs_verbosity) +seq_printf (m,",ecryptfs_debug=%d\n" , ecryptfs_verbosity); + +seq_printf (m,",ecryptfs_cipher=%s" , + mount_crypt_stat->global_default_cipher_name); + +if (mount_crypt_stat->global_default_cipher_key_size) +seq_printf (m,",ecryptfs_key_bytes=%d" , + mount_crypt_stat->global_default_cipher_key_size); +if (mount_crypt_stat->flags &ECRYPTFS_PLAINTEXT_PASSTHROUGH_ENABLED ) +seq_printf (m,",ecryptfs_passthrough" ); +if (mount_crypt_stat->flags &ECRYPTFS_XATTR_METADATA_ENABLED ) +seq_printf (m,",ecryptfs_xattr_metadata" ); +if (mount_crypt_stat->flags &ECRYPTFS_ENCRYPTED_VIEW_ENABLED ) +seq_printf (m,",ecryptfs_encrypted_view" ); + +return 0 ; }struct super_operations ecryptfs_sops = {