Skip to content

Commit 41e9a7f

Browse files
author
Al Viro
committed
minixfs: switch to kmap_local_page()
Again, a counterpart of Fabio's fs/sysv patch 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 6628f69 commit 41e9a7f

3 files changed

Lines changed: 16 additions & 22 deletions

File tree

fs/minix/dir.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ static void *dir_get_page(struct inode *dir, unsigned long n, struct page **p)
7070
struct page *page = read_mapping_page(mapping, n, NULL);
7171
if (IS_ERR(page))
7272
return ERR_CAST(page);
73-
kmap(page);
7473
*p = page;
75-
return page_address(page);
74+
return kmap_local_page(page);
7675
}
7776

7877
static inline void *minix_next_entry(void *de, struct minix_sb_info *sbi)
@@ -123,13 +122,13 @@ static int minix_readdir(struct file *file, struct dir_context *ctx)
123122
unsigned l = strnlen(name, sbi->s_namelen);
124123
if (!dir_emit(ctx, name, l,
125124
inumber, DT_UNKNOWN)) {
126-
dir_put_page(page);
125+
unmap_and_put_page(page, p);
127126
return 0;
128127
}
129128
}
130129
ctx->pos += chunk_size;
131130
}
132-
dir_put_page(page);
131+
unmap_and_put_page(page, kaddr);
133132
}
134133
return 0;
135134
}
@@ -189,7 +188,7 @@ minix_dirent *minix_find_entry(struct dentry *dentry, struct page **res_page)
189188
if (namecompare(namelen, sbi->s_namelen, name, namx))
190189
goto found;
191190
}
192-
dir_put_page(page);
191+
unmap_and_put_page(page, kaddr);
193192
}
194193
return NULL;
195194

@@ -255,7 +254,7 @@ int minix_add_link(struct dentry *dentry, struct inode *inode)
255254
goto out_unlock;
256255
}
257256
unlock_page(page);
258-
dir_put_page(page);
257+
unmap_and_put_page(page, kaddr);
259258
}
260259
BUG();
261260
return -EINVAL;
@@ -278,7 +277,7 @@ int minix_add_link(struct dentry *dentry, struct inode *inode)
278277
mark_inode_dirty(dir);
279278
err = minix_handle_dirsync(dir);
280279
out_put:
281-
dir_put_page(page);
280+
unmap_and_put_page(page, kaddr);
282281
return err;
283282
out_unlock:
284283
unlock_page(page);
@@ -324,7 +323,7 @@ int minix_make_empty(struct inode *inode, struct inode *dir)
324323
goto fail;
325324
}
326325

327-
kaddr = kmap_atomic(page);
326+
kaddr = kmap_local_page(page);
328327
memset(kaddr, 0, PAGE_SIZE);
329328

330329
if (sbi->s_version == MINIX_V3) {
@@ -344,7 +343,7 @@ int minix_make_empty(struct inode *inode, struct inode *dir)
344343
de->inode = dir->i_ino;
345344
strcpy(de->name, "..");
346345
}
347-
kunmap_atomic(kaddr);
346+
kunmap_local(kaddr);
348347

349348
dir_commit_chunk(page, 0, 2 * sbi->s_dirsize);
350349
err = minix_handle_dirsync(inode);
@@ -361,11 +360,11 @@ int minix_empty_dir(struct inode * inode)
361360
struct page *page = NULL;
362361
unsigned long i, npages = dir_pages(inode);
363362
struct minix_sb_info *sbi = minix_sb(inode->i_sb);
364-
char *name;
363+
char *name, *kaddr;
365364
__u32 inumber;
366365

367366
for (i = 0; i < npages; i++) {
368-
char *p, *kaddr, *limit;
367+
char *p, *limit;
369368

370369
kaddr = dir_get_page(inode, i, &page);
371370
if (IS_ERR(kaddr))
@@ -396,12 +395,12 @@ int minix_empty_dir(struct inode * inode)
396395
goto not_empty;
397396
}
398397
}
399-
dir_put_page(page);
398+
unmap_and_put_page(page, kaddr);
400399
}
401400
return 1;
402401

403402
not_empty:
404-
dir_put_page(page);
403+
unmap_and_put_page(page, kaddr);
405404
return 0;
406405
}
407406

@@ -455,7 +454,7 @@ ino_t minix_inode_by_name(struct dentry *dentry)
455454
res = ((minix3_dirent *) de)->inode;
456455
else
457456
res = de->inode;
458-
dir_put_page(page);
457+
unmap_and_put_page(page, de);
459458
}
460459
return res;
461460
}

fs/minix/minix.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ extern int V2_minix_get_block(struct inode *, long, struct buffer_head *, int);
6464
extern unsigned V1_minix_blocks(loff_t, struct super_block *);
6565
extern unsigned V2_minix_blocks(loff_t, struct super_block *);
6666

67-
static inline void dir_put_page(struct page *page)
68-
{
69-
kunmap(page);
70-
put_page(page);
71-
}
7267
extern struct minix_dir_entry *minix_find_entry(struct dentry*, struct page**);
7368
extern int minix_add_link(struct dentry*, struct inode*);
7469
extern int minix_delete_entry(struct minix_dir_entry*, struct page*);

fs/minix/namei.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ static int minix_unlink(struct inode * dir, struct dentry *dentry)
149149
if (!de)
150150
return -ENOENT;
151151
err = minix_delete_entry(de, page);
152-
dir_put_page(page);
152+
unmap_and_put_page(page, de);
153153

154154
if (err)
155155
return err;
@@ -242,9 +242,9 @@ static int minix_rename(struct mnt_idmap *idmap,
242242
}
243243
out_dir:
244244
if (dir_de)
245-
dir_put_page(dir_page);
245+
unmap_and_put_page(dir_page, dir_de);
246246
out_old:
247-
dir_put_page(old_page);
247+
unmap_and_put_page(old_page, old_de);
248248
out:
249249
return err;
250250
}

0 commit comments

Comments
 (0)