Skip to content

Commit

Permalink
fs: remove all rcu head initializations, except on_stack initializations
Browse files Browse the repository at this point in the history
Remove all rcu head inits. We don't care about the RCU head state before passing
it to call_rcu() anyway. Only leave the "on_stack" variants so debugobjects can
keep track of objects on stack.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Andries Brouwer <aeb@cwi.nl>
  • Loading branch information
Paul E. McKenney committed Jun 14, 2010
1 parent 9161e32 commit b97181f
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 9 deletions.
3 changes: 0 additions & 3 deletions fs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@ static struct fdtable * alloc_fdtable(unsigned int nr)
fdt->open_fds = (fd_set *)data;
data += nr / BITS_PER_BYTE;
fdt->close_on_exec = (fd_set *)data;
INIT_RCU_HEAD(&fdt->rcu);
fdt->next = NULL;

return fdt;
Expand Down Expand Up @@ -312,7 +311,6 @@ struct files_struct *dup_fd(struct files_struct *oldf, int *errorp)
new_fdt->close_on_exec = (fd_set *)&newf->close_on_exec_init;
new_fdt->open_fds = (fd_set *)&newf->open_fds_init;
new_fdt->fd = &newf->fd_array[0];
INIT_RCU_HEAD(&new_fdt->rcu);
new_fdt->next = NULL;

spin_lock(&oldf->file_lock);
Expand Down Expand Up @@ -430,7 +428,6 @@ struct files_struct init_files = {
.fd = &init_files.fd_array[0],
.close_on_exec = (fd_set *)&init_files.close_on_exec_init,
.open_fds = (fd_set *)&init_files.open_fds_init,
.rcu = RCU_HEAD_INIT,
},
.file_lock = __SPIN_LOCK_UNLOCKED(init_task.file_lock),
};
Expand Down
31 changes: 26 additions & 5 deletions fs/fs-writeback.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,33 @@ static inline bool bdi_work_on_stack(struct bdi_work *work)
return test_bit(WS_ONSTACK_B, &work->state);
}

static inline void bdi_work_init(struct bdi_work *work,
struct wb_writeback_args *args)
static inline void __bdi_work_init(struct bdi_work *work,
struct wb_writeback_args *args,
int on_stack)
{
INIT_RCU_HEAD(&work->rcu_head);
work->args = *args;
work->state = WS_USED;
if (on_stack) {
work->state |= WS_ONSTACK;
init_rcu_head_on_stack(&work->rcu_head);
}
}

static inline void bdi_work_init(struct bdi_work *work,
struct wb_writeback_args *args)
{
__bdi_work_init(work, args, false);
}

static inline void bdi_work_init_on_stack(struct bdi_work *work,
struct wb_writeback_args *args)
{
__bdi_work_init(work, args, true);
}

static inline void bdi_destroy_work_on_stack(struct bdi_work *work)
{
destroy_rcu_head_on_stack(&work->rcu_head);
}

/**
Expand Down Expand Up @@ -233,11 +254,11 @@ static void bdi_sync_writeback(struct backing_dev_info *bdi,
};
struct bdi_work work;

bdi_work_init(&work, &args);
work.state |= WS_ONSTACK;
bdi_work_init_on_stack(&work, &args);

bdi_queue_work(bdi, &work);
bdi_wait_on_work_clear(&work);
bdi_destroy_work_on_stack(&work);
}

/**
Expand Down
1 change: 0 additions & 1 deletion fs/partitions/check.c
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,6 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
}

/* everything is up and running, commence */
INIT_RCU_HEAD(&p->rcu_head);
rcu_assign_pointer(ptbl->part[partno], p);

/* suppress uevent if the disk supresses it */
Expand Down

0 comments on commit b97181f

Please sign in to comment.