@@ -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
8284static 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 );
287286out_put :
288287 dir_put_page (page );
289- out :
290288 return err ;
291289out_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
442439struct 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
455449ino_t minix_inode_by_name (struct dentry * dentry )
0 commit comments