lkml.org 
[lkml]   [2010]   [Jun]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: linux-next: manual merge of the tip tree with the block tree
On Mon, Jun 21, 2010 at 04:16:23PM +1000, Stephen Rothwell wrote:
> Hi all,
>
> Today's linux-next merge of the tip tree got a conflict in
> fs/fs-writeback.c between commits 7f0e7bed936a0c422641a046551829a01341dd80
> ("writeback: fix writeback completion notifications") and
> 3c4d716538f3eefb1c1f10961a047a6456a2b590 ("writeback: queue work on stack
> in writeback_inodes_sb") from the block tree and commit
> b97181f24212f4c29197890ce1b2b9100bcc184d ("fs: remove all rcu head
> initializations, except on_stack initializations") from the tip tree.
>
> I fixed it up (I hope - see below) and can carry the fix as necessary.

I took a look, and all of the changes from "fs: remove all rcu head
initializations, except on_stack initializations" are reflected in -next.

Thanx, Paul

> --
> Cheers,
> Stephen Rothwell sfr@canb.auug.org.au
>
> diff --cc fs/fs-writeback.c
> index 5455009,af92100..0000000
> --- a/fs/fs-writeback.c
> +++ b/fs/fs-writeback.c
> @@@ -63,16 -63,45 +63,37 @@@ struct bdi_work
> };
>
> enum {
> - WS_USED_B = 0,
> - WS_ONSTACK_B,
> + WS_INPROGRESS = 0,
> + WS_ONSTACK,
> };
>
> - static inline void bdi_work_init(struct bdi_work *work,
> - struct wb_writeback_args *args)
> -#define WS_USED (1 << WS_USED_B)
> -#define WS_ONSTACK (1 << WS_ONSTACK_B)
> -
> -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,
> + int on_stack)
> {
> - INIT_RCU_HEAD(&work->rcu_head);
> work->args = *args;
> - work->state = WS_USED;
> + __set_bit(WS_INPROGRESS, &work->state);
> + if (on_stack) {
> - work->state |= WS_ONSTACK;
> ++ __set_bit(WS_ONSTACK, &work->state);
> + 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);
> }
>
> /**
> @@@ -182,19 -239,26 +203,19 @@@ static void bdi_alloc_queue_work(struc
> * @sb: write inodes from this super_block
> *
> * Description:
> - * This does WB_SYNC_ALL data integrity writeback and waits for the
> - * IO to complete. Callers must hold the sb s_umount semaphore for
> + * This function initiates writeback and waits for the operation to
> + * complete. Callers must hold the sb s_umount semaphore for
> * reading, to avoid having the super disappear before we are done.
> */
> -static void bdi_sync_writeback(struct backing_dev_info *bdi,
> - struct super_block *sb)
> +static void bdi_queue_work_onstack(struct wb_writeback_args *args)
> {
> - struct wb_writeback_args args = {
> - .sb = sb,
> - .sync_mode = WB_SYNC_ALL,
> - .nr_pages = LONG_MAX,
> - .range_cyclic = 0,
> - };
> struct bdi_work work;
>
> - bdi_work_init(&work, args);
> - __set_bit(WS_ONSTACK, &work.state);
> - bdi_work_init_on_stack(&work, &args);
> ++ bdi_work_init_on_stack(&work, args);
>
> - bdi_queue_work(bdi, &work);
> - bdi_wait_on_work_clear(&work);
> + bdi_queue_work(args->sb->s_bdi, &work);
> + bdi_wait_on_work_done(&work);
> + bdi_destroy_work_on_stack(&work);
> }
>
> /**
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/


\
 
 \ /
  Last update: 2010-06-21 19:15    [W:0.046 / U:0.532 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site