* About sg_tablesize in 2.6 kernel
@ 2006-10-01 11:22 Aboo Valappil
2006-10-01 18:43 ` Arjan van de Ven
0 siblings, 1 reply; 4+ messages in thread
From: Aboo Valappil @ 2006-10-01 11:22 UTC (permalink / raw)
To: linux-scsi
Hi All,
I am not sure if this is the right place to ask these questions. I am
new to this list. Does this list offer any help to device driver
developers? I appreciate if any one could give an answer to these
questions.
1. In 2.6 kernel, even if I set the sg_tablesize to SG_NONE, the
mid-layer is still queuing commands with use_sg=1. There is no way to
disable this SG at all? I do not need a sg_table as I do not use any DMA
or anything else. With SG_NONE, the use_sg is always set to 1 and the IO
size queued by mid layer is only 512 bytes and decreases the throughput
very badly.
2. One of the challenge I am facing is that the scatterlist structure is
changed. There is no virtual address, but they replaced this with a page
and offset fields. Since I need only the virtual addresses for the
actual buffer (No DMA), I am using the following method to calculate the
virtual address.
address=page_address(sg[i].page) + sg[i].offset;
Is this the right way? I am assuming that sg[i].page will be mapped in
to kernel address space as this address is created by SCSI mid-layer. Is
that right? Or do I have to use kmap? I tried replacing page_address
with kmap/kunmap. But as soon as call kunmap to unmap, the kernal
panics! Any thoughts?
3. Do I have to disable bottom halves before calling scsi_done()? It
seems that the kernel panics when I call scsi_done if I use spin_lock
instead of spin_lock_bh(). This is one of my spin_locks created for
protecting a data structure.
Thanks in advance,
Aboo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: About sg_tablesize in 2.6 kernel
2006-10-01 11:22 About sg_tablesize in 2.6 kernel Aboo Valappil
@ 2006-10-01 18:43 ` Arjan van de Ven
2006-10-02 2:33 ` Aboo Valappil
0 siblings, 1 reply; 4+ messages in thread
From: Arjan van de Ven @ 2006-10-01 18:43 UTC (permalink / raw)
To: Aboo Valappil; +Cc: linux-scsi
[note: you forgot to put in a link to your sourcecode, which greatly
reduces our ability to give you good answers; please fix this]
>
> 1. In 2.6 kernel, even if I set the sg_tablesize to SG_NONE, the
> mid-layer is still queuing commands with use_sg=1. There is no way to
> disable this SG at all?
in 2.6 everything is now going via the ONE sg codepath yes. The dual
code path stuff was just incredibly fragile and a bad idea.
> address=page_address(sg[i].page) + sg[i].offset;
>
> Is this the right way? I am assuming that sg[i].page will be mapped in
> to kernel address space as this address is created by SCSI mid-layer. Is
> that right? Or do I have to use kmap? I tried replacing page_address
> with kmap/kunmap. But as soon as call kunmap to unmap, the kernal
> panics! Any thoughts?
kmap doesn't take struct page as argument.
but.... if you show us the real code we can give you better
suggestions.
>
> 3. Do I have to disable bottom halves before calling scsi_done()? It
> seems that the kernel panics when I call scsi_done if I use spin_lock
> instead of spin_lock_bh(). This is one of my spin_locks created for
> protecting a data structure.
you don't need any locks before calling the done method.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: About sg_tablesize in 2.6 kernel
2006-10-01 18:43 ` Arjan van de Ven
@ 2006-10-02 2:33 ` Aboo Valappil
2006-10-02 3:29 ` Douglas Gilbert
0 siblings, 1 reply; 4+ messages in thread
From: Aboo Valappil @ 2006-10-02 2:33 UTC (permalink / raw)
To: Arjan van de Ven; +Cc: linux-scsi
Thanks Arjan for clearing it about SG. I think i am fine with the
page_address() for now.
I managed to finish my virtual scsi device driver. Everything seems to
be working fine (Reading, writing , etc). But i can not mount a file
system created on it. From my verification, the driver seems to be doing
its job. I verified the read and write to the disk by partitioning the
device, using dd, etc. Seems to work fine. But i can not mount the file
system created on it.
(I am sorry if i am taking too much of your time and posting wrong
questions in the mailing list. Please guide me on this, this is the only
mailing list which responded to my question. I am not a professional
kernel developer and this is not my full time job but rather just a hobby).
I attached the outputs below, can some one advice what could be wrong here?
I partitioned the drive as follows. Please not that it shows one head, 8
sectors. I am not sure where it is getting this info. (I do not see any
SCSI commands issued to the driver for MODE_SENSE for disk geometry page).
[root@localhost scsitap]# fdisk -l /dev/sdb
Disk /dev/sdb: 104 MB, 104858112 bytes
1 heads, 8 sectors/track, 25600 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 2 21975 87896 83 Linux
[root@localhost scsitap]# mkfs /dev/sdb1
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
22000 inodes, 87896 blocks
4394 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
11 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost scsitap]# mount -o ro /dev/sdb1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
EXT2-fs error (device sdb1): ext2_check_descriptors: Block bitmap for
group 0 not in group (block 0)!
EXT2-fs: group descriptors corrupted!
Aboo
Arjan van de Ven wrote:
> [note: you forgot to put in a link to your sourcecode, which greatly
> reduces our ability to give you good answers; please fix this]
>
>> 1. In 2.6 kernel, even if I set the sg_tablesize to SG_NONE, the
>> mid-layer is still queuing commands with use_sg=1. There is no way to
>> disable this SG at all?
>>
>
> in 2.6 everything is now going via the ONE sg codepath yes. The dual
> code path stuff was just incredibly fragile and a bad idea.
>
>
>
>
>> address=page_address(sg[i].page) + sg[i].offset;
>>
>> Is this the right way? I am assuming that sg[i].page will be mapped in
>> to kernel address space as this address is created by SCSI mid-layer. Is
>> that right? Or do I have to use kmap? I tried replacing page_address
>> with kmap/kunmap. But as soon as call kunmap to unmap, the kernal
>> panics! Any thoughts?
>>
>
> kmap doesn't take struct page as argument.
>
> but.... if you show us the real code we can give you better
> suggestions.
>
>
>> 3. Do I have to disable bottom halves before calling scsi_done()? It
>> seems that the kernel panics when I call scsi_done if I use spin_lock
>> instead of spin_lock_bh(). This is one of my spin_locks created for
>> protecting a data structure.
>>
>
> you don't need any locks before calling the done method.
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: About sg_tablesize in 2.6 kernel
2006-10-02 2:33 ` Aboo Valappil
@ 2006-10-02 3:29 ` Douglas Gilbert
0 siblings, 0 replies; 4+ messages in thread
From: Douglas Gilbert @ 2006-10-02 3:29 UTC (permalink / raw)
To: Aboo Valappil; +Cc: Arjan van de Ven, linux-scsi
Aboo Valappil wrote:
> Thanks Arjan for clearing it about SG. I think i am fine with the
> page_address() for now.
>
> I managed to finish my virtual scsi device driver. Everything seems to
> be working fine (Reading, writing , etc). But i can not mount a file
> system created on it. From my verification, the driver seems to be doing
> its job. I verified the read and write to the disk by partitioning the
> device, using dd, etc. Seems to work fine. But i can not mount the file
> system created on it.
READ(6+10), WRITE(6+10) and READ_CAPACITY(10) is all you
should need initially. It may be useful to compare what
your driver does with the scsi_debug driver which is also
a virtual SCSI (disk) target (IOW a ram disk). See:
http://www.torque.net/sg/sdebug26.html
The fdisk, mkfs, mount sequence works with the scsi_debug
driver. Try making the virtual disk image sizes for scsi_debug
and your driver the same, then read (with dd) and compare
both images after the mkfs. You could also check the first
63 sectors after the fdisk stage.
> (I am sorry if i am taking too much of your time and posting wrong
> questions in the mailing list. Please guide me on this, this is the only
> mailing list which responded to my question. I am not a professional
> kernel developer and this is not my full time job but rather just a hobby).
>
> I attached the outputs below, can some one advice what could be wrong here?
> I partitioned the drive as follows. Please not that it shows one head, 8
> sectors. I am not sure where it is getting this info. (I do not see any
> SCSI commands issued to the driver for MODE_SENSE for disk geometry page).
The kernel just makes them up.
The head/cylinder/sector stuff is just fiction anyway.
The disk geometry mode page is obsolete, but keep your
mode page logic as it is useful in other situations.
Doug Gilbert
> [root@localhost scsitap]# fdisk -l /dev/sdb
>
> Disk /dev/sdb: 104 MB, 104858112 bytes
> 1 heads, 8 sectors/track, 25600 cylinders
> Units = cylinders of 8 * 512 = 4096 bytes
>
> Device Boot Start End Blocks Id System
> /dev/sdb1 2 21975 87896 83 Linux
>
>
> [root@localhost scsitap]# mkfs /dev/sdb1
> mke2fs 1.37 (21-Mar-2005)
> Filesystem label=
> OS type: Linux
> Block size=1024 (log=0)
> Fragment size=1024 (log=0)
> 22000 inodes, 87896 blocks
> 4394 blocks (5.00%) reserved for the super user
> First data block=1
> Maximum filesystem blocks=67371008
> 11 block groups
> 8192 blocks per group, 8192 fragments per group
> 2000 inodes per group
> Superblock backups stored on blocks:
> 8193, 24577, 40961, 57345, 73729
>
> Writing inode tables: done
> Writing superblocks and filesystem accounting information: done
>
> This filesystem will be automatically checked every 39 mounts or
> 180 days, whichever comes first. Use tune2fs -c or -i to override.
>
> [root@localhost scsitap]# mount -o ro /dev/sdb1 /mnt
> mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
> missing codepage or other error
> In some cases useful info is found in syslog - try
> dmesg | tail or so
>
> EXT2-fs error (device sdb1): ext2_check_descriptors: Block bitmap for
> group 0 not in group (block 0)!
> EXT2-fs: group descriptors corrupted!
>
> Aboo
>
>
>
> Arjan van de Ven wrote:
>> [note: you forgot to put in a link to your sourcecode, which greatly
>> reduces our ability to give you good answers; please fix this]
>>
>>> 1. In 2.6 kernel, even if I set the sg_tablesize to SG_NONE, the
>>> mid-layer is still queuing commands with use_sg=1. There is no way to
>>> disable this SG at all?
>>>
>>
>> in 2.6 everything is now going via the ONE sg codepath yes. The dual
>> code path stuff was just incredibly fragile and a bad idea.
>>
>>
>>
>>
>>> address=page_address(sg[i].page) + sg[i].offset;
>>>
>>> Is this the right way? I am assuming that sg[i].page will be mapped
>>> in to kernel address space as this address is created by SCSI
>>> mid-layer. Is that right? Or do I have to use kmap? I tried replacing
>>> page_address with kmap/kunmap. But as soon as call kunmap to unmap,
>>> the kernal panics! Any thoughts?
>>>
>>
>> kmap doesn't take struct page as argument.
>>
>> but.... if you show us the real code we can give you better
>> suggestions.
>>
>>
>>> 3. Do I have to disable bottom halves before calling scsi_done()? It
>>> seems that the kernel panics when I call scsi_done if I use spin_lock
>>> instead of spin_lock_bh(). This is one of my spin_locks created for
>>> protecting a data structure.
>>>
>>
>> you don't need any locks before calling the done method.
>>
>>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-10-02 3:27 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-01 11:22 About sg_tablesize in 2.6 kernel Aboo Valappil
2006-10-01 18:43 ` Arjan van de Ven
2006-10-02 2:33 ` Aboo Valappil
2006-10-02 3:29 ` Douglas Gilbert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox