Messages in this thread | | | Subject | Re: [rfc patch 2/2] direct-io: remove address alignment check | From | Badari Pulavarty <> | Date | Thu, 14 Jul 2005 16:16:23 -0700 |
| |
How does your patch ensures that we meet the driver alignment restrictions ? Like you said, you need atleast "even" byte alignment for IDE etc..
And also, are there any restrictions on how much the "minimum" IO size has to be ? I mean, can I read "1" byte ? I guess you are not relaxing it (yet)..
Thanks, Badari
On Wed, 2005-07-13 at 16:43 -0700, Daniel McNeil wrote: > This patch relaxes the direct i/o alignment check so that user addresses > do not have to be a multiple of the device block size. > > I've done some preliminary testing and it mostly works on an ext3 > file system on a ide disk. I have seen trouble when the user address > is on an odd byte boundary. Sometimes the data is read back incorrectly > on read and sometimes I get these kernel error messages: > hda: dma_timer_expiry: dma status == 0x60 > hda: DMA timeout retry > hda: timeout waiting for DMA > hda: status error: status=0x58 { DriveReady SeekComplete DataRequest } > ide: failed opcode was: unknown > hda: drive not ready for command > > Doing direct-io with user addresses on even, non-512 boundaries appears > to be working correctly. > > Any additional testing and/or comments welcome. > > Signed-off-by: Daniel McNeil <daniel@osdl.org> > > --- linux-2.6.12.orig/fs/direct-io.c 2005-06-28 16:39:39.000000000 -0700 > +++ linux-2.6.12/fs/direct-io.c 2005-06-28 16:39:59.000000000 -0700 > @@ -1147,7 +1147,9 @@ __blockdev_direct_IO(int rw, struct kioc > goto out; > } > > - /* Check the memory alignment. Blocks cannot straddle pages */ > + /* > + * Check the i/o. It must be a multiple of device block size. > + */ > for (seg = 0; seg < nr_segs; seg++) { > addr = (unsigned long)iov[seg].iov_base; > size = iov[seg].iov_len; > @@ -1156,7 +1158,7 @@ __blockdev_direct_IO(int rw, struct kioc > if (bdev) > blkbits = bdev_blkbits; > blocksize_mask = (1 << blkbits) - 1; > - if ((addr & blocksize_mask) || (size & blocksize_mask)) > + if (size & blocksize_mask) > goto out; > } > } > > > -- > To unsubscribe, send a message with 'unsubscribe linux-aio' in > the body to majordomo@kvack.org. For more info on Linux AIO, > see: http://www.kvack.org/aio/ > Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a> >
- 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/
| |