2007-10-25 19:36:19

by Anton Blanchard

[permalink] [raw]
Subject: [PATCH] Initialise scatter/gather list in sg driver


After turning on DEBUG_SG I hit a fail:

kernel BUG at include/linux/scatterlist.h:50!

sg_build_indirect
sg_build_reserve
sg_open
chrdev_open
__dentry_open
do_filp_open
do_sys_open

We should initialise the sg list when we allocate it in sg_build_sgat.

Signed-off-by: Anton Blanchard <[email protected]>
---

diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index b5fa4f0..f1871ea 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -1652,6 +1652,7 @@ sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
schp->buffer = kzalloc(sg_bufflen, gfp_flags);
if (!schp->buffer)
return -ENOMEM;
+ sg_init_table(schp->buffer, tablesize);
schp->sglist_len = sg_bufflen;
return tablesize; /* number of scat_gath elements allocated */
}


2007-10-26 12:02:01

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] Initialise scatter/gather list in sg driver

On Thu, Oct 25 2007, Anton Blanchard wrote:
>
> After turning on DEBUG_SG I hit a fail:
>
> kernel BUG at include/linux/scatterlist.h:50!
>
> sg_build_indirect
> sg_build_reserve
> sg_open
> chrdev_open
> __dentry_open
> do_filp_open
> do_sys_open
>
> We should initialise the sg list when we allocate it in sg_build_sgat.
>
> Signed-off-by: Anton Blanchard <[email protected]>
> ---
>
> diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
> index b5fa4f0..f1871ea 100644
> --- a/drivers/scsi/sg.c
> +++ b/drivers/scsi/sg.c
> @@ -1652,6 +1652,7 @@ sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
> schp->buffer = kzalloc(sg_bufflen, gfp_flags);
> if (!schp->buffer)
> return -ENOMEM;
> + sg_init_table(schp->buffer, tablesize);
> schp->sglist_len = sg_bufflen;
> return tablesize; /* number of scat_gath elements allocated */
> }

Thanks, applied!

--
Jens Axboe