[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4A876BC3.3020407@gmail.com>
Date: Sun, 16 Aug 2009 11:15:31 +0900
From: Tejun Heo <htejun@...il.com>
To: Atsushi Nemoto <anemo@....ocn.ne.jp>
CC: Jeff Garzik <jgarzik@...ox.com>, linux-ide@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: ata_tf_read_block() question
Hello, Atsushi.
Atsushi Nemoto wrote:
> I have a question on CHS calculation in ata_tf_read_block().
>
> The calculation in ata_tf_read_block() is:
> block = (cyl * dev->heads + head) * dev->sectors + sect;
>
> but ata_build_rw_tf() does:
> track = (u32)block / dev->sectors;
> cyl = track / dev->heads;
> head = track % dev->heads;
> sect = (u32)block % dev->sectors + 1;
>
> It seems inconsistent. The correct calculation is:
> block = (cyl * dev->heads + head) * dev->sectors + sect - 1;
> isn't it?
Yes, indeed.
> I don't have any real problem. Just noticed by code reading.
ata_tf_read_block() currently is used only when reporting failed block
address to upper layer so off-by-one bug there wouldn't be too
visible, especially for the venerable CHS addressing.
Care to submit a patch w/ warning message and capping for sect == 0
case?
Thanks.
--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists