mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
ntfs3: Convert attr_data_read_resident() to take a folio
Now that all three callers have a folio, pass it in and use folio_fill_tail() to do the hard work of filling the folio. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
00c91073a3
commit
ab055cf9db
|
|
@ -1239,11 +1239,12 @@ int attr_data_get_block(struct ntfs_inode *ni, CLST vcn, CLST clen, CLST *lcn,
|
|||
goto out;
|
||||
}
|
||||
|
||||
int attr_data_read_resident(struct ntfs_inode *ni, struct page *page)
|
||||
int attr_data_read_resident(struct ntfs_inode *ni, struct folio *folio)
|
||||
{
|
||||
u64 vbo;
|
||||
struct ATTRIB *attr;
|
||||
u32 data_size;
|
||||
size_t len;
|
||||
|
||||
attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, NULL);
|
||||
if (!attr)
|
||||
|
|
@ -1252,25 +1253,15 @@ int attr_data_read_resident(struct ntfs_inode *ni, struct page *page)
|
|||
if (attr->non_res)
|
||||
return E_NTFS_NONRESIDENT;
|
||||
|
||||
vbo = page->index << PAGE_SHIFT;
|
||||
vbo = folio->index << PAGE_SHIFT;
|
||||
data_size = le32_to_cpu(attr->res.data_size);
|
||||
if (vbo < data_size) {
|
||||
const char *data = resident_data(attr);
|
||||
char *kaddr = kmap_atomic(page);
|
||||
u32 use = data_size - vbo;
|
||||
if (vbo > data_size)
|
||||
len = 0;
|
||||
else
|
||||
len = min(data_size - vbo, folio_size(folio));
|
||||
|
||||
if (use > PAGE_SIZE)
|
||||
use = PAGE_SIZE;
|
||||
|
||||
memcpy(kaddr, data + vbo, use);
|
||||
memset(kaddr + use, 0, PAGE_SIZE - use);
|
||||
kunmap_atomic(kaddr);
|
||||
flush_dcache_page(page);
|
||||
SetPageUptodate(page);
|
||||
} else if (!PageUptodate(page)) {
|
||||
zero_user_segment(page, 0, PAGE_SIZE);
|
||||
SetPageUptodate(page);
|
||||
}
|
||||
folio_fill_tail(folio, 0, resident_data(attr) + vbo, len);
|
||||
folio_mark_uptodate(folio);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -583,7 +583,7 @@ static noinline int ntfs_get_block_vbo(struct inode *inode, u64 vbo,
|
|||
err = 0;
|
||||
} else {
|
||||
ni_lock(ni);
|
||||
err = attr_data_read_resident(ni, &folio->page);
|
||||
err = attr_data_read_resident(ni, folio);
|
||||
ni_unlock(ni);
|
||||
|
||||
if (!err)
|
||||
|
|
@ -717,7 +717,7 @@ static int ntfs_read_folio(struct file *file, struct folio *folio)
|
|||
|
||||
if (is_resident(ni)) {
|
||||
ni_lock(ni);
|
||||
err = attr_data_read_resident(ni, &folio->page);
|
||||
err = attr_data_read_resident(ni, folio);
|
||||
ni_unlock(ni);
|
||||
if (err != E_NTFS_NONRESIDENT) {
|
||||
folio_unlock(folio);
|
||||
|
|
@ -923,7 +923,7 @@ int ntfs_write_begin(struct file *file, struct address_space *mapping,
|
|||
}
|
||||
|
||||
ni_lock(ni);
|
||||
err = attr_data_read_resident(ni, &folio->page);
|
||||
err = attr_data_read_resident(ni, folio);
|
||||
ni_unlock(ni);
|
||||
|
||||
if (!err) {
|
||||
|
|
|
|||
|
|
@ -434,7 +434,7 @@ int attr_set_size(struct ntfs_inode *ni, enum ATTR_TYPE type,
|
|||
struct ATTRIB **ret);
|
||||
int attr_data_get_block(struct ntfs_inode *ni, CLST vcn, CLST clen, CLST *lcn,
|
||||
CLST *len, bool *new, bool zero);
|
||||
int attr_data_read_resident(struct ntfs_inode *ni, struct page *page);
|
||||
int attr_data_read_resident(struct ntfs_inode *ni, struct folio *folio);
|
||||
int attr_data_write_resident(struct ntfs_inode *ni, struct page *page);
|
||||
int attr_load_runs_vcn(struct ntfs_inode *ni, enum ATTR_TYPE type,
|
||||
const __le16 *name, u8 name_len, struct runs_tree *run,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user