提交 d739b42b 编写于 作者: P Pekka Enberg 提交者: Linus Torvalds

[PATCH] reiserfs: remove kmalloc wrapper

Remove kmalloc() wrapper from fs/reiserfs/.  Please note that a reiserfs
/proc entry format is changed because kmalloc statistics is removed.
Signed-off-by: NPekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 d19720a9
......@@ -150,18 +150,15 @@ static int reiserfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
if (d_reclen <= 32) {
local_buf = small_buf;
} else {
local_buf =
reiserfs_kmalloc(d_reclen, GFP_NOFS,
inode->i_sb);
local_buf = kmalloc(d_reclen,
GFP_NOFS);
if (!local_buf) {
pathrelse(&path_to_entry);
ret = -ENOMEM;
goto out;
}
if (item_moved(&tmp_ih, &path_to_entry)) {
reiserfs_kfree(local_buf,
d_reclen,
inode->i_sb);
kfree(local_buf);
goto research;
}
}
......@@ -174,15 +171,12 @@ static int reiserfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
(dirent, local_buf, d_reclen, d_off, d_ino,
DT_UNKNOWN) < 0) {
if (local_buf != small_buf) {
reiserfs_kfree(local_buf,
d_reclen,
inode->i_sb);
kfree(local_buf);
}
goto end;
}
if (local_buf != small_buf) {
reiserfs_kfree(local_buf, d_reclen,
inode->i_sb);
kfree(local_buf);
}
// next entry should be looked for with such offset
next_pos = deh_offset(deh) + 1;
......
......@@ -2021,38 +2021,6 @@ static int get_neighbors(struct tree_balance *p_s_tb, int n_h)
return CARRY_ON;
}
#ifdef CONFIG_REISERFS_CHECK
void *reiserfs_kmalloc(size_t size, gfp_t flags, struct super_block *s)
{
void *vp;
static size_t malloced;
vp = kmalloc(size, flags);
if (vp) {
REISERFS_SB(s)->s_kmallocs += size;
if (REISERFS_SB(s)->s_kmallocs > malloced + 200000) {
reiserfs_warning(s,
"vs-8301: reiserfs_kmalloc: allocated memory %d",
REISERFS_SB(s)->s_kmallocs);
malloced = REISERFS_SB(s)->s_kmallocs;
}
}
return vp;
}
void reiserfs_kfree(const void *vp, size_t size, struct super_block *s)
{
kfree(vp);
REISERFS_SB(s)->s_kmallocs -= size;
if (REISERFS_SB(s)->s_kmallocs < 0)
reiserfs_warning(s,
"vs-8302: reiserfs_kfree: allocated memory %d",
REISERFS_SB(s)->s_kmallocs);
}
#endif
static int get_virtual_node_size(struct super_block *sb, struct buffer_head *bh)
{
int max_num_of_items;
......@@ -2086,7 +2054,7 @@ static int get_mem_for_virtual_node(struct tree_balance *tb)
/* we have to allocate more memory for virtual node */
if (tb->vn_buf) {
/* free memory allocated before */
reiserfs_kfree(tb->vn_buf, tb->vn_buf_size, tb->tb_sb);
kfree(tb->vn_buf);
/* this is not needed if kfree is atomic */
check_fs = 1;
}
......@@ -2095,24 +2063,15 @@ static int get_mem_for_virtual_node(struct tree_balance *tb)
tb->vn_buf_size = size;
/* get memory for virtual item */
buf =
reiserfs_kmalloc(size, GFP_ATOMIC | __GFP_NOWARN,
tb->tb_sb);
buf = kmalloc(size, GFP_ATOMIC | __GFP_NOWARN);
if (!buf) {
/* getting memory with GFP_KERNEL priority may involve
balancing now (due to indirect_to_direct conversion on
dcache shrinking). So, release path and collected
resources here */
free_buffers_in_tb(tb);
buf = reiserfs_kmalloc(size, GFP_NOFS, tb->tb_sb);
buf = kmalloc(size, GFP_NOFS);
if (!buf) {
#ifdef CONFIG_REISERFS_CHECK
reiserfs_warning(tb->tb_sb,
"vs-8345: get_mem_for_virtual_node: "
"kmalloc failed. reiserfs kmalloced %d bytes",
REISERFS_SB(tb->tb_sb)->
s_kmallocs);
#endif
tb->vn_buf_size = 0;
}
tb->vn_buf = buf;
......@@ -2619,7 +2578,6 @@ void unfix_nodes(struct tree_balance *tb)
}
}
if (tb->vn_buf)
reiserfs_kfree(tb->vn_buf, tb->vn_buf_size, tb->tb_sb);
kfree(tb->vn_buf);
}
......@@ -152,18 +152,16 @@ static struct reiserfs_bitmap_node *allocate_bitmap_node(struct super_block
struct reiserfs_bitmap_node *bn;
static int id;
bn = reiserfs_kmalloc(sizeof(struct reiserfs_bitmap_node), GFP_NOFS,
p_s_sb);
bn = kmalloc(sizeof(struct reiserfs_bitmap_node), GFP_NOFS);
if (!bn) {
return NULL;
}
bn->data = reiserfs_kmalloc(p_s_sb->s_blocksize, GFP_NOFS, p_s_sb);
bn->data = kzalloc(p_s_sb->s_blocksize, GFP_NOFS);
if (!bn->data) {
reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb);
kfree(bn);
return NULL;
}
bn->id = id++;
memset(bn->data, 0, p_s_sb->s_blocksize);
INIT_LIST_HEAD(&bn->list);
return bn;
}
......@@ -197,8 +195,8 @@ static inline void free_bitmap_node(struct super_block *p_s_sb,
struct reiserfs_journal *journal = SB_JOURNAL(p_s_sb);
journal->j_used_bitmap_nodes--;
if (journal->j_free_bitmap_nodes > REISERFS_MAX_BITMAP_NODES) {
reiserfs_kfree(bn->data, p_s_sb->s_blocksize, p_s_sb);
reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb);
kfree(bn->data);
kfree(bn);
} else {
list_add(&bn->list, &journal->j_bitmap_nodes);
journal->j_free_bitmap_nodes++;
......@@ -276,8 +274,8 @@ static int free_bitmap_nodes(struct super_block *p_s_sb)
while (next != &journal->j_bitmap_nodes) {
bn = list_entry(next, struct reiserfs_bitmap_node, list);
list_del(next);
reiserfs_kfree(bn->data, p_s_sb->s_blocksize, p_s_sb);
reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb);
kfree(bn->data);
kfree(bn);
next = journal->j_bitmap_nodes.next;
journal->j_free_bitmap_nodes--;
}
......@@ -581,7 +579,7 @@ static inline void put_journal_list(struct super_block *s,
jl->j_trans_id, jl->j_refcount);
}
if (--jl->j_refcount == 0)
reiserfs_kfree(jl, sizeof(struct reiserfs_journal_list), s);
kfree(jl);
}
/*
......@@ -1818,8 +1816,7 @@ void remove_journal_hash(struct super_block *sb,
static void free_journal_ram(struct super_block *p_s_sb)
{
struct reiserfs_journal *journal = SB_JOURNAL(p_s_sb);
reiserfs_kfree(journal->j_current_jl,
sizeof(struct reiserfs_journal_list), p_s_sb);
kfree(journal->j_current_jl);
journal->j_num_lists--;
vfree(journal->j_cnode_free_orig);
......@@ -2093,21 +2090,15 @@ static int journal_read_transaction(struct super_block *p_s_sb,
}
trans_id = get_desc_trans_id(desc);
/* now we know we've got a good transaction, and it was inside the valid time ranges */
log_blocks =
reiserfs_kmalloc(get_desc_trans_len(desc) *
sizeof(struct buffer_head *), GFP_NOFS, p_s_sb);
real_blocks =
reiserfs_kmalloc(get_desc_trans_len(desc) *
sizeof(struct buffer_head *), GFP_NOFS, p_s_sb);
log_blocks = kmalloc(get_desc_trans_len(desc) *
sizeof(struct buffer_head *), GFP_NOFS);
real_blocks = kmalloc(get_desc_trans_len(desc) *
sizeof(struct buffer_head *), GFP_NOFS);
if (!log_blocks || !real_blocks) {
brelse(c_bh);
brelse(d_bh);
reiserfs_kfree(log_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
reiserfs_kfree(real_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
kfree(log_blocks);
kfree(real_blocks);
reiserfs_warning(p_s_sb,
"journal-1169: kmalloc failed, unable to mount FS");
return -1;
......@@ -2145,12 +2136,8 @@ static int journal_read_transaction(struct super_block *p_s_sb,
brelse_array(real_blocks, i);
brelse(c_bh);
brelse(d_bh);
reiserfs_kfree(log_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
reiserfs_kfree(real_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
kfree(log_blocks);
kfree(real_blocks);
return -1;
}
}
......@@ -2166,12 +2153,8 @@ static int journal_read_transaction(struct super_block *p_s_sb,
brelse_array(real_blocks, get_desc_trans_len(desc));
brelse(c_bh);
brelse(d_bh);
reiserfs_kfree(log_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
reiserfs_kfree(real_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
kfree(log_blocks);
kfree(real_blocks);
return -1;
}
memcpy(real_blocks[i]->b_data, log_blocks[i]->b_data,
......@@ -2193,12 +2176,8 @@ static int journal_read_transaction(struct super_block *p_s_sb,
get_desc_trans_len(desc) - i);
brelse(c_bh);
brelse(d_bh);
reiserfs_kfree(log_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
reiserfs_kfree(real_blocks,
get_desc_trans_len(desc) *
sizeof(struct buffer_head *), p_s_sb);
kfree(log_blocks);
kfree(real_blocks);
return -1;
}
brelse(real_blocks[i]);
......@@ -2217,12 +2196,8 @@ static int journal_read_transaction(struct super_block *p_s_sb,
journal->j_trans_id = trans_id + 1;
brelse(c_bh);
brelse(d_bh);
reiserfs_kfree(log_blocks,
le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *),
p_s_sb);
reiserfs_kfree(real_blocks,
le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *),
p_s_sb);
kfree(log_blocks);
kfree(real_blocks);
return 0;
}
......@@ -2472,13 +2447,11 @@ static struct reiserfs_journal_list *alloc_journal_list(struct super_block *s)
{
struct reiserfs_journal_list *jl;
retry:
jl = reiserfs_kmalloc(sizeof(struct reiserfs_journal_list), GFP_NOFS,
s);
jl = kzalloc(sizeof(struct reiserfs_journal_list), GFP_NOFS);
if (!jl) {
yield();
goto retry;
}
memset(jl, 0, sizeof(*jl));
INIT_LIST_HEAD(&jl->j_list);
INIT_LIST_HEAD(&jl->j_working_list);
INIT_LIST_HEAD(&jl->j_tail_bh_list);
......@@ -3042,14 +3015,12 @@ struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct
}
return th;
}
th = reiserfs_kmalloc(sizeof(struct reiserfs_transaction_handle),
GFP_NOFS, s);
th = kmalloc(sizeof(struct reiserfs_transaction_handle), GFP_NOFS);
if (!th)
return NULL;
ret = journal_begin(th, s, nblocks);
if (ret) {
reiserfs_kfree(th, sizeof(struct reiserfs_transaction_handle),
s);
kfree(th);
return NULL;
}
......@@ -3067,8 +3038,7 @@ int reiserfs_end_persistent_transaction(struct reiserfs_transaction_handle *th)
ret = -EIO;
if (th->t_refcount == 0) {
SB_JOURNAL(s)->j_persistent_trans--;
reiserfs_kfree(th, sizeof(struct reiserfs_transaction_handle),
s);
kfree(th);
}
return ret;
}
......
......@@ -456,7 +456,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
/* get memory for composing the entry */
buflen = DEH_SIZE + ROUND_UP(namelen);
if (buflen > sizeof(small_buf)) {
buffer = reiserfs_kmalloc(buflen, GFP_NOFS, dir->i_sb);
buffer = kmalloc(buflen, GFP_NOFS);
if (buffer == 0)
return -ENOMEM;
} else
......@@ -490,7 +490,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
retval = reiserfs_find_entry(dir, name, namelen, &path, &de);
if (retval != NAME_NOT_FOUND) {
if (buffer != small_buf)
reiserfs_kfree(buffer, buflen, dir->i_sb);
kfree(buffer);
pathrelse(&path);
if (retval == IO_ERROR) {
......@@ -515,7 +515,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
reiserfs_warning(dir->i_sb,
"reiserfs_add_entry: Congratulations! we have got hash function screwed up");
if (buffer != small_buf)
reiserfs_kfree(buffer, buflen, dir->i_sb);
kfree(buffer);
pathrelse(&path);
return -EBUSY;
}
......@@ -535,7 +535,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
&entry_key);
if (buffer != small_buf)
reiserfs_kfree(buffer, buflen, dir->i_sb);
kfree(buffer);
pathrelse(&path);
return -EBUSY;
}
......@@ -546,7 +546,7 @@ static int reiserfs_add_entry(struct reiserfs_transaction_handle *th,
reiserfs_paste_into_item(th, &path, &entry_key, dir, buffer,
paste_size);
if (buffer != small_buf)
reiserfs_kfree(buffer, buflen, dir->i_sb);
kfree(buffer);
if (retval) {
reiserfs_check_path(&path);
return retval;
......@@ -1065,7 +1065,7 @@ static int reiserfs_symlink(struct inode *parent_dir,
goto out_failed;
}
name = reiserfs_kmalloc(item_len, GFP_NOFS, parent_dir->i_sb);
name = kmalloc(item_len, GFP_NOFS);
if (!name) {
drop_new_inode(inode);
retval = -ENOMEM;
......@@ -1079,14 +1079,14 @@ static int reiserfs_symlink(struct inode *parent_dir,
retval = journal_begin(&th, parent_dir->i_sb, jbegin_count);
if (retval) {
drop_new_inode(inode);
reiserfs_kfree(name, item_len, parent_dir->i_sb);
kfree(name);
goto out_failed;
}
retval =
reiserfs_new_inode(&th, parent_dir, mode, name, strlen(symname),
dentry, inode);
reiserfs_kfree(name, item_len, parent_dir->i_sb);
kfree(name);
if (retval) { /* reiserfs_new_inode iputs for us */
goto out_failed;
}
......
......@@ -88,7 +88,6 @@ static int show_super(struct seq_file *m, struct super_block *sb)
seq_printf(m, "state: \t%s\n"
"mount options: \t%s%s%s%s%s%s%s%s%s%s%s\n"
"gen. counter: \t%i\n"
"s_kmallocs: \t%i\n"
"s_disk_reads: \t%i\n"
"s_disk_writes: \t%i\n"
"s_fix_nodes: \t%i\n"
......@@ -128,7 +127,7 @@ static int show_super(struct seq_file *m, struct super_block *sb)
"SMALL_TAILS " : "NO_TAILS ",
replay_only(sb) ? "REPLAY_ONLY " : "",
convert_reiserfs(sb) ? "CONV " : "",
atomic_read(&r->s_generation_counter), SF(s_kmallocs),
atomic_read(&r->s_generation_counter),
SF(s_disk_reads), SF(s_disk_writes), SF(s_fix_nodes),
SF(s_do_balance), SF(s_unneeded_left_neighbor),
SF(s_good_search_by_key_reada), SF(s_bmaps),
......
......@@ -472,12 +472,6 @@ static void reiserfs_put_super(struct super_block *s)
print_statistics(s);
if (REISERFS_SB(s)->s_kmallocs != 0) {
reiserfs_warning(s,
"vs-2004: reiserfs_put_super: allocated memory left %d",
REISERFS_SB(s)->s_kmallocs);
}
if (REISERFS_SB(s)->reserved_blocks != 0) {
reiserfs_warning(s,
"green-2005: reiserfs_put_super: reserved blocks left %d",
......
......@@ -368,15 +368,13 @@ static int __xattr_readdir(struct file *filp, void *dirent, filldir_t filldir)
if (d_reclen <= 32) {
local_buf = small_buf;
} else {
local_buf =
reiserfs_kmalloc(d_reclen, GFP_NOFS, inode->i_sb);
local_buf = kmalloc(d_reclen, GFP_NOFS);
if (!local_buf) {
pathrelse(&path_to_entry);
return -ENOMEM;
}
if (item_moved(&tmp_ih, &path_to_entry)) {
reiserfs_kfree(local_buf, d_reclen,
inode->i_sb);
kfree(local_buf);
/* sigh, must retry. Do this same offset again */
next_pos = d_off;
......@@ -399,13 +397,12 @@ static int __xattr_readdir(struct file *filp, void *dirent, filldir_t filldir)
if (filldir(dirent, local_buf, d_reclen, d_off, d_ino,
DT_UNKNOWN) < 0) {
if (local_buf != small_buf) {
reiserfs_kfree(local_buf, d_reclen,
inode->i_sb);
kfree(local_buf);
}
goto end;
}
if (local_buf != small_buf) {
reiserfs_kfree(local_buf, d_reclen, inode->i_sb);
kfree(local_buf);
}
} /* while */
......
......@@ -1971,22 +1971,6 @@ extern struct file_operations reiserfs_file_operations;
extern struct address_space_operations reiserfs_address_space_operations;
/* fix_nodes.c */
#ifdef CONFIG_REISERFS_CHECK
void *reiserfs_kmalloc(size_t size, gfp_t flags, struct super_block *s);
void reiserfs_kfree(const void *vp, size_t size, struct super_block *s);
#else
static inline void *reiserfs_kmalloc(size_t size, int flags,
struct super_block *s)
{
return kmalloc(size, flags);
}
static inline void reiserfs_kfree(const void *vp, size_t size,
struct super_block *s)
{
kfree(vp);
}
#endif
int fix_nodes(int n_op_mode, struct tree_balance *p_s_tb,
struct item_head *p_s_ins_ih, const void *);
......
......@@ -382,7 +382,6 @@ struct reiserfs_sb_info {
on-disk FS format */
/* session statistics */
int s_kmallocs;
int s_disk_reads;
int s_disk_writes;
int s_fix_nodes;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册