#include <linux/delay.h>
#include "../w1.h"
+#include "../w1_io.h"
#include "../w1_int.h"
#include "../w1_family.h"
u8 rom[9], crc, verdict;
int i, max_trying = 10;
- mutex_lock(&sl->master->mutex);
+ atomic_inc(&sl->refcnt);
+ smp_mb__after_atomic_inc();
+ if (down_interruptible(&sl->master->mutex)) {
+ count = 0;
+ goto out_dec;
+ }
if (off > W1_SLAVE_DATA_SIZE) {
count = 0;
count += sprintf(buf + count, "t=%d\n", w1_convert_temp(rom, sl->family->fid));
out:
- mutex_unlock(&dev->mutex);
+ up(&dev->mutex);
+out_dec:
+ smp_mb__before_atomic_inc();
+ atomic_dec(&sl->refcnt);
return count;
}