Skip to content

Commit 4d3727f

Browse files
Matthew Wilcox (Oracle)brauner
authored andcommitted
ecryptfs: Convert ecryptfs_write() to use a folio
Remove ecryptfs_get_locked_page() and call read_mapping_folio() directly. Use the folio throught this function. Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Pankaj Raghav <[email protected]> Signed-off-by: Christian Brauner <[email protected]>
1 parent 890d477 commit 4d3727f

File tree

3 files changed

+13
-29
lines changed

3 files changed

+13
-29
lines changed

fs/ecryptfs/ecryptfs_kernel.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,6 @@ int ecryptfs_read_lower_page_segment(struct folio *folio_for_ecryptfs,
662662
pgoff_t page_index,
663663
size_t offset_in_page, size_t size,
664664
struct inode *ecryptfs_inode);
665-
struct page *ecryptfs_get_locked_page(struct inode *inode, loff_t index);
666665
int ecryptfs_parse_packet_length(unsigned char *data, size_t *size,
667666
size_t *length_size);
668667
int ecryptfs_write_packet_length(char *dest, size_t size,

fs/ecryptfs/mmap.c

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,6 @@
2222
#include <linux/unaligned.h>
2323
#include "ecryptfs_kernel.h"
2424

25-
/*
26-
* ecryptfs_get_locked_page
27-
*
28-
* Get one page from cache or lower f/s, return error otherwise.
29-
*
30-
* Returns locked and up-to-date page (if ok), with increased
31-
* refcnt.
32-
*/
33-
struct page *ecryptfs_get_locked_page(struct inode *inode, loff_t index)
34-
{
35-
struct page *page = read_mapping_page(inode->i_mapping, index, NULL);
36-
if (!IS_ERR(page))
37-
lock_page(page);
38-
return page;
39-
}
40-
4125
/*
4226
* This is where we encrypt the data and pass the encrypted data to
4327
* the lower filesystem. In OpenPGP-compatible mode, we operate on

fs/ecryptfs/read_write.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode,
9393
int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
9494
size_t size)
9595
{
96-
struct page *ecryptfs_page;
9796
struct ecryptfs_crypt_stat *crypt_stat;
9897
char *ecryptfs_page_virt;
9998
loff_t ecryptfs_file_size = i_size_read(ecryptfs_inode);
@@ -111,6 +110,7 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
111110
else
112111
pos = offset;
113112
while (pos < (offset + size)) {
113+
struct folio *ecryptfs_folio;
114114
pgoff_t ecryptfs_page_idx = (pos >> PAGE_SHIFT);
115115
size_t start_offset_in_page = (pos & ~PAGE_MASK);
116116
size_t num_bytes = (PAGE_SIZE - start_offset_in_page);
@@ -130,17 +130,18 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
130130
if (num_bytes > total_remaining_zeros)
131131
num_bytes = total_remaining_zeros;
132132
}
133-
ecryptfs_page = ecryptfs_get_locked_page(ecryptfs_inode,
134-
ecryptfs_page_idx);
135-
if (IS_ERR(ecryptfs_page)) {
136-
rc = PTR_ERR(ecryptfs_page);
133+
ecryptfs_folio = read_mapping_folio(ecryptfs_inode->i_mapping,
134+
ecryptfs_page_idx, NULL);
135+
if (IS_ERR(ecryptfs_folio)) {
136+
rc = PTR_ERR(ecryptfs_folio);
137137
printk(KERN_ERR "%s: Error getting page at "
138138
"index [%ld] from eCryptfs inode "
139139
"mapping; rc = [%d]\n", __func__,
140140
ecryptfs_page_idx, rc);
141141
goto out;
142142
}
143-
ecryptfs_page_virt = kmap_local_page(ecryptfs_page);
143+
folio_lock(ecryptfs_folio);
144+
ecryptfs_page_virt = kmap_local_folio(ecryptfs_folio, 0);
144145

145146
/*
146147
* pos: where we're now writing, offset: where the request was
@@ -164,17 +165,17 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset,
164165
data_offset += num_bytes;
165166
}
166167
kunmap_local(ecryptfs_page_virt);
167-
flush_dcache_page(ecryptfs_page);
168-
SetPageUptodate(ecryptfs_page);
169-
unlock_page(ecryptfs_page);
168+
flush_dcache_folio(ecryptfs_folio);
169+
folio_mark_uptodate(ecryptfs_folio);
170+
folio_unlock(ecryptfs_folio);
170171
if (crypt_stat->flags & ECRYPTFS_ENCRYPTED)
171-
rc = ecryptfs_encrypt_page(ecryptfs_page);
172+
rc = ecryptfs_encrypt_page(&ecryptfs_folio->page);
172173
else
173174
rc = ecryptfs_write_lower_page_segment(ecryptfs_inode,
174-
ecryptfs_page,
175+
&ecryptfs_folio->page,
175176
start_offset_in_page,
176177
data_offset);
177-
put_page(ecryptfs_page);
178+
folio_put(ecryptfs_folio);
178179
if (rc) {
179180
printk(KERN_ERR "%s: Error encrypting "
180181
"page; rc = [%d]\n", __func__, rc);

0 commit comments

Comments
 (0)