#include <linux/spinlock.h>
#include <linux/list.h>
+#include <linux/delay.h>
#include "w1_family.h"
-spinlock_t w1_flock = SPIN_LOCK_UNLOCKED;
+DEFINE_SPINLOCK(w1_flock);
static LIST_HEAD(w1_families);
static int w1_check_family(struct w1_family *f)
spin_unlock(&w1_flock);
- while (atomic_read(&fent->refcnt))
- schedule_timeout(10);
+ while (atomic_read(&fent->refcnt)) {
+ printk(KERN_INFO "Waiting for family %u to become free: refcnt=%d.\n",
+ fent->fid, atomic_read(&fent->refcnt));
+
+ if (msleep_interruptible(1000))
+ flush_signals(current);
+ }
}
/*