libata: clear dev->ering in smarter way
authorTejun Heo <tj@kernel.org>
Thu, 29 Jan 2009 11:31:32 +0000 (20:31 +0900)
committerJeff Garzik <jgarzik@redhat.com>
Tue, 3 Feb 2009 04:03:17 +0000 (23:03 -0500)
commit99cf610aa4840d822cdc67d194b23b55010ca9bd
tree68bc3d6c1f13849731bb7b4b11414b4b0e5fbffb
parent9913ff8abf1c70a8d52560dc931e1901d025ad27
libata: clear dev->ering in smarter way

dev->ering used to be cleared together with the rest of ata_device in
ata_dev_init() which is called whenever a probing event occurs.
dev->ering is about to be used to track probing failures so it needs
to remain persistent over multiple porbing events.  This patch
achieves this by doing the following.

* Instead of CLEAR_OFFSET, define CLEAR_BEGIN and CLEAR_END and only
  clear between BEGIN and END.  ering is moved after END.  The split
  of persistent area is to allow hotter items remain at the head.

* ering is explicitly cleared on ata_dev_disable() and when device
  attach succeeds.  So, ering is persistent throug a device's life
  time (unless explicitly cleared of course) and also through periods
  inbetween disablement of an attached device and successful detection
  of the next one.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
include/linux/libata.h