Re: O_DIRECT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 21 Jul 2004 16:18:37 -0700
Shesha Sreenivasamurthy <shesha@xxxxxxxxxxx> wrote:

Hi Shesha,

Your original question (and my answer) was about a different situation:

        - partition with no filesystem
        - access on this raw partition

Now you start talking about various file-systems and I get the impression
that you access the device through the file-system (although that is
not very clear in your text) on a mounted fs.

What I told you applied to straight partitions (without mounted a mounted fs).

I don't know the exact rules for the various file-systems.
They might be different (and some might not support O_DIRECT at all).
I expect the same "soft block size rules" to apply for the filesystems
that *do* support O_DIRECT.  Note that mounting a partition might
change the softblock size of that partition used by the kernel from thereon.


	greetings,
	Rob van Nieuwkerk

PS1: what kernel are you using ?

PS2: what are you trying to do ?

PS3: you mention "our driver ..".  What is this driver ?



> I could never get it working with 4096 block size.
> 
> I created an EXT3 with blockize=4096 (mkfs.ext3 -b 4096 /dev/sda11). 
> Alligned memory to 4096 boundary. Read 8192 Bytes. -> UNSUCCESSFUL :(
> I created an XFS with blockize=4096 (mkfs.xfs -f  -b size=4096 
> /dev/sda11). Alligned memory to 4096 boundary. Read 8192 Bytes. -> 
> UNSUCCESSFUL :(
> 
> SUCCESS HAPPEND ONLY WHEN ....
> 
> 1. I created an XFS with blockize=4096 (mkfs.xfs -f  -b size=4096 
> /dev/sda11).
>                                                        OR
>     I created an EXT3 with blockize=4096 (mkfs.ext3 -b 4096 /dev/sda11).
> 
> 2. Changed blocksizeto 1024
> 3. Alligned memory to 1024 boundary.
> 4  Read 8192 Bytes. -> SUCCESSFUL :)
> 
> -Shesha
> 
> 
> Rob van Nieuwkerk wrote:
> 
> >On Wed, 21 Jul 2004 11:01:20 -0700
> >Shesha Sreenivasamurthy <shesha@xxxxxxxxxxx> wrote:
> >
> >Hi Shesha,
> >
> >  
> >
> >>ohhh OK, if the block size is 4096, then the read/write size must be 
> >>integer multiple of 4096 ??? is it ???
> >>In general should the read/write length be a multiple of block size?
> >>    
> >>
> >
> >Yes, see my previous emails.
> >
> >	greetings,
> >	Rob van Nieuwkerk
> >
> >  
> >
> >>Rob van Nieuwkerk wrote:
> >>
> >>    
> >>
> >>>On Wed, 21 Jul 2004 10:10:26 -0700
> >>>Shesha Sreenivasamurthy <shesha@xxxxxxxxxxx> wrote:
> >>>
> >>>Hi Shesha,
> >>>
> >>>You don't mention what the *size* of your read()/write() is.
> >>>Besides a requirement on the alignment of the read/write buffer
> >>>the size of the read()/write() must also be OK.
> >>>
> >>>	greetings,
> >>>	Rob van Nieuwkerk
> >>>
> >>> 
> >>>
> >>>      
> >>>
> >>>>This is what I found ....
> >>>>
> >>>>Our driver sets the block size to be 4096. so BLKBSZGET will return 
> >>>>4096. So if I allin the memory at 4096 boundary, I cannot read using 
> >>>>O_DIRECT. But, if I set the block size to 512.  I can read/write 
> >>>>successfully. It also works with 1024, but no with 4096
> >>>>
> >>>>So the recepie what I am following is ...
> >>>>
> >>>>BLKBSZGET -> Get original block size
> >>>>BLKBSZSET ->  Set the block size to 512
> >>>>READ | WRITE Successfully ;)
> >>>>BLKBSZSET ->  Set back to the original block size
> >>>>
> >>>>-Shesha
> >>>>
> >>>>Rob van Nieuwkerk wrote:
> >>>>
> >>>>   
> >>>>
> >>>>        
> >>>>
> >>>>>On Tue, 20 Jul 2004 10:27:57 -0700
> >>>>>Shesha Sreenivasamurthy <shesha@xxxxxxxxxxx> wrote:
> >>>>>
> >>>>>Hi Shesha,
> >>>>>
> >>>>>
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>>>I am having trouble with O_DIRECT. Trying to read or write from a block 
> >>>>>>device partition.
> >>>>>>
> >>>>>>1. Can O_DIRECT be used on a plain block device partition say 
> >>>>>>"/dev/sda11" without having a filesystem on it.
> >>>>>>  
> >>>>>>
> >>>>>>       
> >>>>>>
> >>>>>>            
> >>>>>>
> >>>>>yes.
> >>>>>
> >>>>>
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>>>2. If no file system is created then what should be the softblock size. 
> >>>>>>I am using the IOCTL "BLKBSZGET". Is this correct?
> >>>>>>  
> >>>>>>
> >>>>>>       
> >>>>>>
> >>>>>>            
> >>>>>>
> >>>>>yes.
> >>>>>
> >>>>>
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>>>>3. Can we use SEEK_END with O_DIRECT on a partition without filesystem.
> >>>>>>  
> >>>>>>
> >>>>>>       
> >>>>>>
> >>>>>>            
> >>>>>>
> >>>>>yes.
> >>>>>
> >>>>>I'm using these exact things in an application.
> >>>>>
> >>>>>Note that with 2.4 kernels the "granularity" you can use for offset
> >>>>>and r/w size is the softblock size (*).  For 2.6 the requirements are
> >>>>>much more relaxed: it's the device blocksize (typically 512 byte).
> >>>>>
> >>>>>(*): actually one of offset or r/w size has a smaller minimum if
> >>>>>I remember correctly.  Don't remember which one.  But if you assume
> >>>>>the softblock size as a minimum for both you're allways safe.
> >>>>>
> >>>>>	greetings,
> >>>>>	Rob van Nieuwkerk
> >>>>>
> >>>>>--
> >>>>>Kernelnewbies: Help each other learn about the Linux kernel.
> >>>>>Archive:       http://mail.nl.linux.org/kernelnewbies/
> >>>>>FAQ:           http://kernelnewbies.org/faq/
> >>>>>
> >>>>>
> >>>>>.
> >>>>>
> >>>>>
> >>>>>
> >>>>>     
> >>>>>
> >>>>>          
> >>>>>
> >>>--
> >>>Kernelnewbies: Help each other learn about the Linux kernel.
> >>>Archive:       http://mail.nl.linux.org/kernelnewbies/
> >>>FAQ:           http://kernelnewbies.org/faq/
> >>>
> >>>
> >>>.
> >>>
> >>> 
> >>>
> >>>      
> >>>
> >
> >--
> >Kernelnewbies: Help each other learn about the Linux kernel.
> >Archive:       http://mail.nl.linux.org/kernelnewbies/
> >FAQ:           http://kernelnewbies.org/faq/
> >
> >
> >.
> >
> >  
> >
> 

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux