aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/aoe/aoechr.c
diff options
context:
space:
mode:
authorEd L. Cashin <ecashin@coraid.com>2008-02-08 07:20:03 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-08 12:22:31 -0500
commit262bf54144ebcb78cd0d057d2705dc5fb7bba7ac (patch)
tree6a995fead6fa9638e02fc6e3928fe0a8612f073a /drivers/block/aoe/aoechr.c
parentcf446f0dbafb5428a551da1c0df8f56316831df8 (diff)
aoe: user can ask driver to forget previously detected devices
When an AoE device is detected, the kernel is informed, and a new block device is created. If the device is unused, the block device corresponding to remote device that is no longer available may be removed from the system by telling the aoe driver to "flush" its list of devices. Without this patch, software like GPFS and LVM may attempt to read from AoE devices that were discovered earlier but are no longer present, blocking until the I/O attempt times out. Signed-off-by: Ed L. Cashin <ecashin@coraid.com> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/block/aoe/aoechr.c')
-rw-r--r--drivers/block/aoe/aoechr.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/block/aoe/aoechr.c b/drivers/block/aoe/aoechr.c
index f1124664c5c9..1bc85aa2271f 100644
--- a/drivers/block/aoe/aoechr.c
+++ b/drivers/block/aoe/aoechr.c
@@ -15,6 +15,7 @@ enum {
15 MINOR_DISCOVER, 15 MINOR_DISCOVER,
16 MINOR_INTERFACES, 16 MINOR_INTERFACES,
17 MINOR_REVALIDATE, 17 MINOR_REVALIDATE,
18 MINOR_FLUSH,
18 MSGSZ = 2048, 19 MSGSZ = 2048,
19 NMSG = 100, /* message backlog to retain */ 20 NMSG = 100, /* message backlog to retain */
20}; 21};
@@ -43,6 +44,7 @@ static struct aoe_chardev chardevs[] = {
43 { MINOR_DISCOVER, "discover" }, 44 { MINOR_DISCOVER, "discover" },
44 { MINOR_INTERFACES, "interfaces" }, 45 { MINOR_INTERFACES, "interfaces" },
45 { MINOR_REVALIDATE, "revalidate" }, 46 { MINOR_REVALIDATE, "revalidate" },
47 { MINOR_FLUSH, "flush" },
46}; 48};
47 49
48static int 50static int
@@ -158,6 +160,9 @@ aoechr_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offp
158 break; 160 break;
159 case MINOR_REVALIDATE: 161 case MINOR_REVALIDATE:
160 ret = revalidate(buf, cnt); 162 ret = revalidate(buf, cnt);
163 break;
164 case MINOR_FLUSH:
165 ret = aoedev_flush(buf, cnt);
161 } 166 }
162 if (ret == 0) 167 if (ret == 0)
163 ret = cnt; 168 ret = cnt;