aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/dir.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-05-15 19:26:10 -0400
committerJaegeuk Kim <jaegeuk@kernel.org>2016-03-18 00:19:33 -0400
commit0b81d0779072696371822e5ed9e7c6292e547024 (patch)
treec75412a642ee596fd33a392f0f353c4c1185f7f5 /fs/f2fs/dir.c
parent59692b7c71e4271b62bddce5bfd50b9e805a4a02 (diff)
fs crypto: move per-file encryption from f2fs tree to fs/crypto
This patch adds the renamed functions moved from the f2fs crypto files. 1. definitions for per-file encryption used by ext4 and f2fs. 2. crypto.c for encrypt/decrypt functions a. IO preparation: - fscrypt_get_ctx / fscrypt_release_ctx b. before IOs: - fscrypt_encrypt_page - fscrypt_decrypt_page - fscrypt_zeroout_range c. after IOs: - fscrypt_decrypt_bio_pages - fscrypt_pullback_bio_page - fscrypt_restore_control_page 3. policy.c supporting context management. a. For ioctls: - fscrypt_process_policy - fscrypt_get_policy b. For context permission - fscrypt_has_permitted_context - fscrypt_inherit_context 4. keyinfo.c to handle permissions - fscrypt_get_encryption_info - fscrypt_free_encryption_info 5. fname.c to support filename encryption a. general wrapper functions - fscrypt_fname_disk_to_usr - fscrypt_fname_usr_to_disk - fscrypt_setup_filename - fscrypt_free_filename b. specific filename handling functions - fscrypt_fname_alloc_buffer - fscrypt_fname_free_buffer 6. Makefile and Kconfig Cc: Al Viro <viro@ftp.linux.org.uk> Signed-off-by: Michael Halcrow <mhalcrow@google.com> Signed-off-by: Ildar Muslukhov <ildarm@google.com> Signed-off-by: Uday Savagaonkar <savagaon@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/dir.c')
-rw-r--r--fs/f2fs/dir.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 8f09da0552ac..f82e28b121a8 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -77,7 +77,7 @@ static unsigned long dir_block_index(unsigned int level,
77} 77}
78 78
79static struct f2fs_dir_entry *find_in_block(struct page *dentry_page, 79static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
80 struct f2fs_filename *fname, 80 struct fscrypt_name *fname,
81 f2fs_hash_t namehash, 81 f2fs_hash_t namehash,
82 int *max_slots, 82 int *max_slots,
83 struct page **res_page) 83 struct page **res_page)
@@ -103,15 +103,15 @@ static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
103 return de; 103 return de;
104} 104}
105 105
106struct f2fs_dir_entry *find_target_dentry(struct f2fs_filename *fname, 106struct f2fs_dir_entry *find_target_dentry(struct fscrypt_name *fname,
107 f2fs_hash_t namehash, int *max_slots, 107 f2fs_hash_t namehash, int *max_slots,
108 struct f2fs_dentry_ptr *d) 108 struct f2fs_dentry_ptr *d)
109{ 109{
110 struct f2fs_dir_entry *de; 110 struct f2fs_dir_entry *de;
111 unsigned long bit_pos = 0; 111 unsigned long bit_pos = 0;
112 int max_len = 0; 112 int max_len = 0;
113 struct f2fs_str de_name = FSTR_INIT(NULL, 0); 113 struct fscrypt_str de_name = FSTR_INIT(NULL, 0);
114 struct f2fs_str *name = &fname->disk_name; 114 struct fscrypt_str *name = &fname->disk_name;
115 115
116 if (max_slots) 116 if (max_slots)
117 *max_slots = 0; 117 *max_slots = 0;
@@ -157,7 +157,7 @@ found:
157 157
158static struct f2fs_dir_entry *find_in_level(struct inode *dir, 158static struct f2fs_dir_entry *find_in_level(struct inode *dir,
159 unsigned int level, 159 unsigned int level,
160 struct f2fs_filename *fname, 160 struct fscrypt_name *fname,
161 struct page **res_page) 161 struct page **res_page)
162{ 162{
163 struct qstr name = FSTR_TO_QSTR(&fname->disk_name); 163 struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
@@ -218,12 +218,12 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
218 struct f2fs_dir_entry *de = NULL; 218 struct f2fs_dir_entry *de = NULL;
219 unsigned int max_depth; 219 unsigned int max_depth;
220 unsigned int level; 220 unsigned int level;
221 struct f2fs_filename fname; 221 struct fscrypt_name fname;
222 int err; 222 int err;
223 223
224 *res_page = NULL; 224 *res_page = NULL;
225 225
226 err = f2fs_fname_setup_filename(dir, child, 1, &fname); 226 err = fscrypt_setup_filename(dir, child, 1, &fname);
227 if (err) 227 if (err)
228 return NULL; 228 return NULL;
229 229
@@ -251,7 +251,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
251 break; 251 break;
252 } 252 }
253out: 253out:
254 f2fs_fname_free_filename(&fname); 254 fscrypt_free_filename(&fname);
255 return de; 255 return de;
256} 256}
257 257
@@ -413,7 +413,7 @@ struct page *init_inode_metadata(struct inode *inode, struct inode *dir,
413 goto put_error; 413 goto put_error;
414 414
415 if (f2fs_encrypted_inode(dir) && f2fs_may_encrypt(inode)) { 415 if (f2fs_encrypted_inode(dir) && f2fs_may_encrypt(inode)) {
416 err = f2fs_inherit_context(dir, inode, page); 416 err = fscrypt_inherit_context(dir, inode, page, false);
417 if (err) 417 if (err)
418 goto put_error; 418 goto put_error;
419 } 419 }
@@ -536,11 +536,11 @@ int __f2fs_add_link(struct inode *dir, const struct qstr *name,
536 struct f2fs_dentry_block *dentry_blk = NULL; 536 struct f2fs_dentry_block *dentry_blk = NULL;
537 struct f2fs_dentry_ptr d; 537 struct f2fs_dentry_ptr d;
538 struct page *page = NULL; 538 struct page *page = NULL;
539 struct f2fs_filename fname; 539 struct fscrypt_name fname;
540 struct qstr new_name; 540 struct qstr new_name;
541 int slots, err; 541 int slots, err;
542 542
543 err = f2fs_fname_setup_filename(dir, name, 0, &fname); 543 err = fscrypt_setup_filename(dir, name, 0, &fname);
544 if (err) 544 if (err)
545 return err; 545 return err;
546 546
@@ -639,7 +639,7 @@ fail:
639 kunmap(dentry_page); 639 kunmap(dentry_page);
640 f2fs_put_page(dentry_page, 1); 640 f2fs_put_page(dentry_page, 1);
641out: 641out:
642 f2fs_fname_free_filename(&fname); 642 fscrypt_free_filename(&fname);
643 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); 643 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
644 return err; 644 return err;
645} 645}
@@ -781,12 +781,12 @@ bool f2fs_empty_dir(struct inode *dir)
781} 781}
782 782
783bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d, 783bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
784 unsigned int start_pos, struct f2fs_str *fstr) 784 unsigned int start_pos, struct fscrypt_str *fstr)
785{ 785{
786 unsigned char d_type = DT_UNKNOWN; 786 unsigned char d_type = DT_UNKNOWN;
787 unsigned int bit_pos; 787 unsigned int bit_pos;
788 struct f2fs_dir_entry *de = NULL; 788 struct f2fs_dir_entry *de = NULL;
789 struct f2fs_str de_name = FSTR_INIT(NULL, 0); 789 struct fscrypt_str de_name = FSTR_INIT(NULL, 0);
790 790
791 bit_pos = ((unsigned long)ctx->pos % d->max); 791 bit_pos = ((unsigned long)ctx->pos % d->max);
792 792
@@ -820,8 +820,9 @@ bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
820 820
821 memcpy(de_name.name, d->filename[bit_pos], de_name.len); 821 memcpy(de_name.name, d->filename[bit_pos], de_name.len);
822 822
823 ret = f2fs_fname_disk_to_usr(d->inode, &de->hash_code, 823 ret = fscrypt_fname_disk_to_usr(d->inode,
824 &de_name, fstr); 824 (u32)de->hash_code, 0,
825 &de_name, fstr);
825 kfree(de_name.name); 826 kfree(de_name.name);
826 if (ret < 0) 827 if (ret < 0)
827 return true; 828 return true;
@@ -849,16 +850,15 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
849 struct file_ra_state *ra = &file->f_ra; 850 struct file_ra_state *ra = &file->f_ra;
850 unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK); 851 unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
851 struct f2fs_dentry_ptr d; 852 struct f2fs_dentry_ptr d;
852 struct f2fs_str fstr = FSTR_INIT(NULL, 0); 853 struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
853 int err = 0; 854 int err = 0;
854 855
855 if (f2fs_encrypted_inode(inode)) { 856 if (f2fs_encrypted_inode(inode)) {
856 err = f2fs_get_encryption_info(inode); 857 err = fscrypt_get_encryption_info(inode);
857 if (err) 858 if (err)
858 return err; 859 return err;
859 860
860 err = f2fs_fname_crypto_alloc_buffer(inode, F2FS_NAME_LEN, 861 err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
861 &fstr);
862 if (err < 0) 862 if (err < 0)
863 return err; 863 return err;
864 } 864 }
@@ -898,14 +898,14 @@ static int f2fs_readdir(struct file *file, struct dir_context *ctx)
898 f2fs_put_page(dentry_page, 1); 898 f2fs_put_page(dentry_page, 1);
899 } 899 }
900out: 900out:
901 f2fs_fname_crypto_free_buffer(&fstr); 901 fscrypt_fname_free_buffer(&fstr);
902 return err; 902 return err;
903} 903}
904 904
905static int f2fs_dir_open(struct inode *inode, struct file *filp) 905static int f2fs_dir_open(struct inode *inode, struct file *filp)
906{ 906{
907 if (f2fs_encrypted_inode(inode)) 907 if (f2fs_encrypted_inode(inode))
908 return f2fs_get_encryption_info(inode) ? -EACCES : 0; 908 return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
909 return 0; 909 return 0;
910} 910}
911 911