[linux-cifs] Re: [PATCH v1 2/8] cifs: allow caller to specify completion op when allocating writedata


2012/2/3 Jeff Layton :
> We'll need a different set of write completion ops when not writing out
> of the pagecache.
>
> Signed-off-by: Jeff Layton 
> ---
> fs/cifs/cifsproto.h |  4 +++-
> fs/cifs/cifssmb.c  |  6 +++---
> fs/cifs/file.c   |  3 ++-
> 3 files changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
> index 2778605..ff528f3 100644
> --- a/fs/cifs/cifsproto.h
> +++ b/fs/cifs/cifsproto.h
> @@ -485,7 +485,9 @@ struct cifs_writedata {
> };
>
> int cifs_async_writev(struct cifs_writedata *wdata);
> -struct cifs_writedata *cifs_writedata_alloc(unsigned int nr_pages);
> +void cifs_writev_complete(struct work_struct *work);
> +struct cifs_writedata *cifs_writedata_alloc(unsigned int nr_pages,
> +                        work_func_t complete);
> void cifs_writedata_release(struct kref *refcount);
>
> #endif         /* _CIFSPROTO_H */
> diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
> index 9525ae3..e03a650 100644
> --- a/fs/cifs/cifssmb.c
> +++ b/fs/cifs/cifssmb.c
> @@ -1990,7 +1990,7 @@ cifs_writev_requeue(struct cifs_writedata *wdata)
>    kref_put(&wdata->refcount, cifs_writedata_release);
> }
>
> -static void
> +void
> cifs_writev_complete(struct work_struct *work)
> {
>    struct cifs_writedata *wdata = container_of(work,
> @@ -2020,7 +2020,7 @@ cifs_writev_complete(struct work_struct *work)
> }
>
> struct cifs_writedata *
> -cifs_writedata_alloc(unsigned int nr_pages)
> +cifs_writedata_alloc(unsigned int nr_pages, work_func_t complete)
> {
>    struct cifs_writedata *wdata;
>
> @@ -2034,7 +2034,7 @@ cifs_writedata_alloc(unsigned int nr_pages)
>    wdata = kzalloc(sizeof(*wdata) +
>            sizeof(struct page *) * (nr_pages - 1), GFP_NOFS);
>    if (wdata != NULL) {
> -        INIT_WORK(&wdata->work, cifs_writev_complete);
> +        INIT_WORK(&wdata->work, complete);
>        kref_init(&wdata->refcount);
>    }
>    return wdata;
> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> index ffbb2b4..5e758d8 100644
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -1640,7 +1640,8 @@ retry:
>        tofind = min((cifs_sb->wsize / PAGE_CACHE_SIZE) - 1,
>                end - index) + 1;
>
> -        wdata = cifs_writedata_alloc((unsigned int)tofind);
> +        wdata = cifs_writedata_alloc((unsigned int)tofind,
> +                      cifs_writev_complete);
>        if (!wdata) {
>            rc = -ENOMEM;
>            break;
> --
> 1.7.7.6
>

Looks good.

Reviewed-by: Pavel Shilovsky 

-- 
Best regards,
Pavel Shilovsky.

This message from: http://www.mailbrowse.com/linux-cifs/5481.html
Previous message: Re: [linux-cifs-client] [PATCH] cifs: hard mount option behaviour implementation
Next message:Re: [PATCH v1 3/8] cifs: rename pTcon to tcon in cifs_iovec_write