Skip to content

Commit ee0d27c

Browse files
author
Al Viro
committed
minixfs: change the signature of dir_get_page()
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. Essentially a copy of the corresponding fs/sysv commit by Fabio M. De Francesco <fmdefrancesco@gmail.com> Reviewed-by: Fabio M. De Francesco <fabio.maria.de.francesco@linux.intel.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent 4812509 commit ee0d27c

1 file changed

Lines changed: 20 additions & 26 deletions

File tree

fs/minix/dir.c

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,15 @@ static int minix_handle_dirsync(struct inode *dir)
7070
return err;
7171
}
7272

73-
static struct page * dir_get_page(struct inode *dir, unsigned long n)
73+
static void *dir_get_page(struct inode *dir, unsigned long n, struct page **p)
7474
{
7575
struct address_space *mapping = dir->i_mapping;
7676
struct page *page = read_mapping_page(mapping, n, NULL);
77-
if (!IS_ERR(page))
78-
kmap(page);
79-
return page;
77+
if (IS_ERR(page))
78+
return ERR_CAST(page);
79+
kmap(page);
80+
*p = page;
81+
return page_address(page);
8082
}
8183

8284
static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi)
@@ -104,11 +106,11 @@ static int minix_readdir(struct file *file, struct dir_context *ctx)
104106

105107
for ( ; n < npages; n++, offset = 0) {
106108
char *p, *kaddr, *limit;
107-
struct page *page = dir_get_page(inode, n);
109+
struct page *page;
108110

109-
if (IS_ERR(page))
111+
kaddr = dir_get_page(inode, n, &page);
112+
if (IS_ERR(kaddr))
110113
continue;
111-
kaddr = (char *)page_address(page);
112114
p = kaddr+offset;
113115
limit = kaddr + minix_last_byte(inode, n) - chunk_size;
114116
for ( ; p <= limit; p = minix_next_entry(p, sbi)) {
@@ -173,11 +175,10 @@ minix_dirent *minix_find_entry(struct dentry *dentry, struct page **res_page)
173175
for (n = 0; n < npages; n++) {
174176
char *kaddr, *limit;
175177

176-
page = dir_get_page(dir, n);
177-
if (IS_ERR(page))
178+
kaddr = dir_get_page(dir, n, &page);
179+
if (IS_ERR(kaddr))
178180
continue;
179181

180-
kaddr = (char*)page_address(page);
181182
limit = kaddr + minix_last_byte(dir, n) - sbi->s_dirsize;
182183
for (p = kaddr; p <= limit; p = minix_next_entry(p, sbi)) {
183184
if (sbi->s_version == MINIX_V3) {
@@ -229,12 +230,10 @@ int minix_add_link(struct dentry *dentry, struct inode *inode)
229230
for (n = 0; n <= npages; n++) {
230231
char *limit, *dir_end;
231232

232-
page = dir_get_page(dir, n);
233-
err = PTR_ERR(page);
234-
if (IS_ERR(page))
235-
goto out;
233+
kaddr = dir_get_page(dir, n, &page);
234+
if (IS_ERR(kaddr))
235+
return PTR_ERR(kaddr);
236236
lock_page(page);
237-
kaddr = (char*)page_address(page);
238237
dir_end = kaddr + minix_last_byte(dir, n);
239238
limit = kaddr + PAGE_SIZE - sbi->s_dirsize;
240239
for (p = kaddr; p <= limit; p = minix_next_entry(p, sbi)) {
@@ -286,7 +285,6 @@ int minix_add_link(struct dentry *dentry, struct inode *inode)
286285
err = minix_handle_dirsync(dir);
287286
out_put:
288287
dir_put_page(page);
289-
out:
290288
return err;
291289
out_unlock:
292290
unlock_page(page);
@@ -375,11 +373,10 @@ int minix_empty_dir(struct inode * inode)
375373
for (i = 0; i < npages; i++) {
376374
char *p, *kaddr, *limit;
377375

378-
page = dir_get_page(inode, i);
379-
if (IS_ERR(page))
376+
kaddr = dir_get_page(inode, i, &page);
377+
if (IS_ERR(kaddr))
380378
continue;
381379

382-
kaddr = (char *)page_address(page);
383380
limit = kaddr + minix_last_byte(inode, i) - sbi->s_dirsize;
384381
for (p = kaddr; p <= limit; p = minix_next_entry(p, sbi)) {
385382
if (sbi->s_version == MINIX_V3) {
@@ -441,15 +438,12 @@ int minix_set_link(struct minix_dir_entry *de, struct page *page,
441438

442439
struct minix_dir_entry * minix_dotdot (struct inode *dir, struct page **p)
443440
{
444-
struct page *page = dir_get_page(dir, 0);
445441
struct minix_sb_info *sbi = minix_sb(dir->i_sb);
446-
struct minix_dir_entry *de = NULL;
442+
struct minix_dir_entry *de = dir_get_page(dir, 0, p);
447443

448-
if (!IS_ERR(page)) {
449-
de = minix_next_entry(page_address(page), sbi);
450-
*p = page;
451-
}
452-
return de;
444+
if (!IS_ERR(de))
445+
return minix_next_entry(de, sbi);
446+
return NULL;
453447
}
454448

455449
ino_t minix_inode_by_name(struct dentry *dentry)

0 commit comments

Comments
 (0)