Commit 181b69dd authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull misc vfs pile from Al Viro.

Random minor cleanups.

* tag 'pull-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  fs: Fix description of vfs_tmpfile()
  sysv: switch to put_and_unmap_page()
  fs/sysv: Don't round down address for kunmap_flush_on_unmap()
parents 11b32219 73bb5a90
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3574,9 +3574,9 @@ static int do_open(struct nameidata *nd,
/**
 * vfs_tmpfile - create tmpfile
 * @idmap:	idmap of the mount the inode was found from
 * @dentry:	pointer to dentry of the base directory
 * @parentpath:	pointer to the path of the base directory
 * @file:	file descriptor of the new tmpfile
 * @mode:	mode of the new tmpfile
 * @open_flag:	flags
 *
 * Create a temporary file.
 *
+11 −17
Original line number Diff line number Diff line
@@ -28,12 +28,6 @@ const struct file_operations sysv_dir_operations = {
	.fsync		= generic_file_fsync,
};

inline void dir_put_page(struct page *page, void *page_addr)
{
	kunmap_local((void *)((unsigned long)page_addr & PAGE_MASK));
	put_page(page);
}

static void dir_commit_chunk(struct page *page, loff_t pos, unsigned len)
{
	struct address_space *mapping = page->mapping;
@@ -58,7 +52,7 @@ static int sysv_handle_dirsync(struct inode *dir)
}

/*
 * Calls to dir_get_page()/dir_put_page() must be nested according to the
 * Calls to dir_get_page()/put_and_unmap_page() must be nested according to the
 * rules documented in mm/highmem.rst.
 *
 * NOTE: sysv_find_entry() and sysv_dotdot() act as calls to dir_get_page()
@@ -109,11 +103,11 @@ static int sysv_readdir(struct file *file, struct dir_context *ctx)
			if (!dir_emit(ctx, name, strnlen(name,SYSV_NAMELEN),
					fs16_to_cpu(SYSV_SB(sb), de->inode),
					DT_UNKNOWN)) {
				dir_put_page(page, kaddr);
				put_and_unmap_page(page, kaddr);
				return 0;
			}
		}
		dir_put_page(page, kaddr);
		put_and_unmap_page(page, kaddr);
	}
	return 0;
}
@@ -137,7 +131,7 @@ static inline int namecompare(int len, int maxlen,
 * itself (as a parameter - res_dir). It does NOT read the inode of the
 * entry - you'll have to do that yourself if you want to.
 *
 * On Success dir_put_page() should be called on *res_page.
 * On Success put_and_unmap_page() should be called on *res_page.
 *
 * sysv_find_entry() acts as a call to dir_get_page() and must be treated
 * accordingly for nesting purposes.
@@ -172,7 +166,7 @@ struct sysv_dir_entry *sysv_find_entry(struct dentry *dentry, struct page **res_
							name, de->name))
					goto found;
			}
			dir_put_page(page, kaddr);
			put_and_unmap_page(page, kaddr);
		}

		if (++n >= npages)
@@ -215,7 +209,7 @@ int sysv_add_link(struct dentry *dentry, struct inode *inode)
				goto out_page;
			de++;
		}
		dir_put_page(page, kaddr);
		put_and_unmap_page(page, kaddr);
	}
	BUG();
	return -EINVAL;
@@ -234,7 +228,7 @@ int sysv_add_link(struct dentry *dentry, struct inode *inode)
	mark_inode_dirty(dir);
	err = sysv_handle_dirsync(dir);
out_page:
	dir_put_page(page, kaddr);
	put_and_unmap_page(page, kaddr);
	return err;
out_unlock:
	unlock_page(page);
@@ -327,12 +321,12 @@ int sysv_empty_dir(struct inode * inode)
			if (de->name[1] != '.' || de->name[2])
				goto not_empty;
		}
		dir_put_page(page, kaddr);
		put_and_unmap_page(page, kaddr);
	}
	return 1;

not_empty:
	dir_put_page(page, kaddr);
	put_and_unmap_page(page, kaddr);
	return 0;
}

@@ -358,7 +352,7 @@ int sysv_set_link(struct sysv_dir_entry *de, struct page *page,
}

/*
 * Calls to dir_get_page()/dir_put_page() must be nested according to the
 * Calls to dir_get_page()/put_and_unmap_page() must be nested according to the
 * rules documented in mm/highmem.rst.
 *
 * sysv_dotdot() acts as a call to dir_get_page() and must be treated
@@ -382,7 +376,7 @@ ino_t sysv_inode_by_name(struct dentry *dentry)
	
	if (de) {
		res = fs16_to_cpu(SYSV_SB(dentry->d_sb), de->inode);
		dir_put_page(page, de);
		put_and_unmap_page(page, de);
	}
	return res;
}
+4 −4
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ static int sysv_unlink(struct inode * dir, struct dentry * dentry)
		inode->i_ctime = dir->i_ctime;
		inode_dec_link_count(inode);
	}
	dir_put_page(page, de);
	put_and_unmap_page(page, de);
	return err;
}

@@ -227,7 +227,7 @@ static int sysv_rename(struct mnt_idmap *idmap, struct inode *old_dir,
		if (!new_de)
			goto out_dir;
		err = sysv_set_link(new_de, new_page, old_inode);
		dir_put_page(new_page, new_de);
		put_and_unmap_page(new_page, new_de);
		if (err)
			goto out_dir;
		new_inode->i_ctime = current_time(new_inode);
@@ -256,9 +256,9 @@ static int sysv_rename(struct mnt_idmap *idmap, struct inode *old_dir,

out_dir:
	if (dir_de)
		dir_put_page(dir_page, dir_de);
		put_and_unmap_page(dir_page, dir_de);
out_old:
	dir_put_page(old_page, old_de);
	put_and_unmap_page(old_page, old_de);
out:
	return err;
}
+0 −1
Original line number Diff line number Diff line
@@ -148,7 +148,6 @@ extern void sysv_destroy_icache(void);


/* dir.c */
extern void dir_put_page(struct page *page, void *vaddr);
extern struct sysv_dir_entry *sysv_find_entry(struct dentry *, struct page **);
extern int sysv_add_link(struct dentry *, struct inode *);
extern int sysv_delete_entry(struct sysv_dir_entry *, struct page *);