All of lore.kernel.org
 help / color / mirror / Atom feed
* ATA over ethernet swapping and obfuscated code
@ 2007-07-31 13:58 Pavel Machek
  2007-07-31 14:46 ` Sébastien Dugué
  2007-07-31 15:03 ` Ed L. Cashin
  0 siblings, 2 replies; 11+ messages in thread
From: Pavel Machek @ 2007-07-31 13:58 UTC (permalink / raw)
  To: ecashin, kernel list; +Cc: ak

Hi!

I wanted to know if it is possible/okay to swap over AOE... 

According to
http://www.coraid.com/support/linux/EtherDrive-2.6-HOWTO-5.html#ss5.20
.. it runs OOM even during normal use, so I guess swapping over it is
no-no?

Can I build both client and server for these using free software?

In the process, I looked at the aoe code, and parts of it look like
obfuscated C contest. The use of switch() as an if was particulary
creative; I'm not even sure if I translated it properly... can you
take a look?

(Patch is 

Signed-off-by: Pavel Machek <pavel@suse.cz>

but I did not even compile test it)

diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index 05a9719..38ba35d 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -64,29 +64,26 @@ aoedev_newdev(ulong nframes)
 
 	d = kzalloc(sizeof *d, GFP_ATOMIC);
 	f = kcalloc(nframes, sizeof *f, GFP_ATOMIC);
- 	switch (!d || !f) {
- 	case 0:
- 		d->nframes = nframes;
- 		d->frames = f;
- 		e = f + nframes;
- 		for (; f<e; f++) {
- 			f->tag = FREETAG;
- 			f->skb = new_skb(ETH_ZLEN);
- 			if (!f->skb)
- 				break;
- 		}
- 		if (f == e)
- 			break;
+ 	if (!d || !f) {
+		kfree(f);
+		kfree(d);
+		return NULL;
+	}
+
+	d->nframes = nframes;
+	d->frames = f;
+	e = f + nframes;
+	for (; f<e; f++) {
+		f->tag = FREETAG;
+		f->skb = new_skb(ETH_ZLEN);
+		if (!f->skb)
+			break;
+	}
+	if (f != e) {
  		while (f > d->frames) {
  			f--;
  			dev_kfree_skb(f->skb);
  		}
- 	default:
- 		if (f)
- 			kfree(f);
- 		if (d)
- 			kfree(d);
-		return NULL;
 	}
 	INIT_WORK(&d->work, aoecmd_sleepwork);
 	spin_lock_init(&d->lock);


aoedev_by_sysminor_m() returns with spinlock held in error case; I
guess that's bad.

struct aoedev *
aoedev_by_sysminor_m(ulong sysminor, ulong bufcnt)
{
	struct aoedev *d;
	ulong flags;

	spin_lock_irqsave(&devlist_lock, flags);

	for (d=devlist; d; d=d->next)
		if (d->sysminor == sysminor)
			break;

	if (d == NULL) {
		d = aoedev_newdev(bufcnt);
	 	if (d == NULL) {
			spin_unlock_irqrestore(&devlist_lock, flags);
			printk(KERN_INFO "aoe: aoedev_newdev
failure.\n");
			return NULL;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ here
		}
		d->sysminor = sysminor;
		d->aoemajor = AOEMAJOR(sysminor);
		d->aoeminor = AOEMINOR(sysminor);
	}

	spin_unlock_irqrestore(&devlist_lock, flags);
	return d;
}

									Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2007-08-21  9:35 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 13:58 ATA over ethernet swapping and obfuscated code Pavel Machek
2007-07-31 14:46 ` Sébastien Dugué
2007-07-31 15:03 ` Ed L. Cashin
2007-07-31 15:29   ` Pavel Machek
2007-07-31 16:21     ` Ed L. Cashin
2007-07-31 22:27       ` ATA over ethernet swapping Pavel Machek
2007-08-01  9:18         ` Peter Zijlstra
2007-08-09 10:11           ` Pavel Machek
2007-08-13  7:45             ` Peter Zijlstra
2007-08-21  7:42               ` Pavel Machek
2007-08-03 12:13       ` ATA over ethernet swapping and obfuscated code Torsten Kaiser

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.