Skip to content

Commit

Permalink
fs/sysv: Change the signature of dir_get_page()
Browse files Browse the repository at this point in the history
Change the signature of dir_get_page() in order to prepare this function
to the conversion to the use of kmap_local_page(). Change also those call
sites which are required to adjust to the new signature.

Cc: Ira Weiny <ira.weiny@intel.com>
Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
xp4ns3 authored and Al Viro committed Jan 20, 2023
1 parent 4bb1a13 commit 8dd6c7b
Showing 1 changed file with 24 additions and 29 deletions.
53 changes: 24 additions & 29 deletions fs/sysv/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,15 @@ static int sysv_handle_dirsync(struct inode *dir)
return err;
}

static struct page * dir_get_page(struct inode *dir, unsigned long n)
static void *dir_get_page(struct inode *dir, unsigned long n, struct page **p)
{
struct address_space *mapping = dir->i_mapping;
struct page *page = read_mapping_page(mapping, n, NULL);
if (!IS_ERR(page))
kmap(page);
return page;
if (IS_ERR(page))
return ERR_CAST(page);
kmap(page);
*p = page;
return page_address(page);
}

static int sysv_readdir(struct file *file, struct dir_context *ctx)
Expand All @@ -85,11 +87,11 @@ static int sysv_readdir(struct file *file, struct dir_context *ctx)
for ( ; n < npages; n++, offset = 0) {
char *kaddr, *limit;
struct sysv_dir_entry *de;
struct page *page = dir_get_page(inode, n);
struct page *page;

if (IS_ERR(page))
kaddr = dir_get_page(inode, n, &page);
if (IS_ERR(kaddr))
continue;
kaddr = (char *)page_address(page);
de = (struct sysv_dir_entry *)(kaddr+offset);
limit = kaddr + PAGE_SIZE - SYSV_DIRSIZE;
for ( ;(char*)de <= limit; de++, ctx->pos += sizeof(*de)) {
Expand Down Expand Up @@ -147,11 +149,10 @@ struct sysv_dir_entry *sysv_find_entry(struct dentry *dentry, struct page **res_
n = start;

do {
char *kaddr;
page = dir_get_page(dir, n);
if (!IS_ERR(page)) {
kaddr = (char*)page_address(page);
de = (struct sysv_dir_entry *) kaddr;
char *kaddr = dir_get_page(dir, n, &page);

if (!IS_ERR(kaddr)) {
de = (struct sysv_dir_entry *)kaddr;
kaddr += PAGE_SIZE - SYSV_DIRSIZE;
for ( ; (char *) de <= kaddr ; de++) {
if (!de->inode)
Expand Down Expand Up @@ -190,11 +191,9 @@ int sysv_add_link(struct dentry *dentry, struct inode *inode)

/* We take care of directory expansion in the same loop */
for (n = 0; n <= npages; n++) {
page = dir_get_page(dir, n);
err = PTR_ERR(page);
if (IS_ERR(page))
goto out;
kaddr = (char*)page_address(page);
kaddr = dir_get_page(dir, n, &page);
if (IS_ERR(kaddr))
return PTR_ERR(kaddr);
de = (struct sysv_dir_entry *)kaddr;
kaddr += PAGE_SIZE - SYSV_DIRSIZE;
while ((char *)de <= kaddr) {
Expand Down Expand Up @@ -225,7 +224,6 @@ int sysv_add_link(struct dentry *dentry, struct inode *inode)
err = sysv_handle_dirsync(dir);
out_page:
dir_put_page(page);
out:
return err;
out_unlock:
unlock_page(page);
Expand Down Expand Up @@ -295,12 +293,11 @@ int sysv_empty_dir(struct inode * inode)
for (i = 0; i < npages; i++) {
char *kaddr;
struct sysv_dir_entry * de;
page = dir_get_page(inode, i);

if (IS_ERR(page))
kaddr = dir_get_page(inode, i, &page);
if (IS_ERR(kaddr))
continue;

kaddr = (char *)page_address(page);
de = (struct sysv_dir_entry *)kaddr;
kaddr += PAGE_SIZE-SYSV_DIRSIZE;

Expand Down Expand Up @@ -347,16 +344,14 @@ void sysv_set_link(struct sysv_dir_entry *de, struct page *page,
sysv_handle_dirsync(inode);
}

struct sysv_dir_entry * sysv_dotdot (struct inode *dir, struct page **p)
struct sysv_dir_entry *sysv_dotdot(struct inode *dir, struct page **p)
{
struct page *page = dir_get_page(dir, 0);
struct sysv_dir_entry *de = NULL;
struct sysv_dir_entry *de = dir_get_page(dir, 0, p);

if (!IS_ERR(page)) {
de = (struct sysv_dir_entry*) page_address(page) + 1;
*p = page;
}
return de;
if (IS_ERR(de))
return NULL;
/* ".." is the second directory entry */
return de + 1;
}

ino_t sysv_inode_by_name(struct dentry *dentry)
Expand Down

0 comments on commit 8dd6c7b

Please sign in to comment.