#define cfs_mutex_down(x) down(x)
#define cfs_up(x) up(x)
#define cfs_down(x) down(x)
+#define cfs_down_interruptible(x) down_interruptible(x)
#define cfs_mutex_down_trylock(x) down_trylock(x)
#define cfs_mutex_lock(x) mutex_lock(x)
#define cfs_mutex_unlock(x) mutex_unlock(x)
#define cfs_up(s) cfs_mutex_up(s)
#define cfs_mutex_down(s) __down(s)
#define cfs_down(s) cfs_mutex_down(s)
+#define cfs_mutex_down_interruptible(s) __down_interruptible(s)
+#define cfs_down_interruptible(s) cfs_mutex_down_interruptible(s)
#define cfs_init_mutex(x) cfs_sema_init(x, 1)
#define cfs_init_mutex_locked(x) cfs_sema_init(x, 0)
__down(mutex);
}
-#define cfs_mutex_lock(m) cfs_mutex_down(m)
-#define cfs_mutex_trylock(s) down_trylock(s)
-#define cfs_mutex_lock_nested(m) cfs_mutex_down(m)
-#define cfs_down(m) cfs_mutex_down(m)
+static inline int cfs_mutex_down_interruptible(cfs_mutex_t *mutex)
+{
+ __down(mutex);
+ return 0;
+}
+
+#define cfs_mutex_lock(m) cfs_mutex_down(m)
+#define cfs_mutex_trylock(s) down_trylock(s)
+#define cfs_mutex_lock_nested(m) cfs_mutex_down(m)
+#define cfs_down(m) cfs_mutex_down(m)
+#define cfs_down_interruptible(m) cfs_mutex_down_interruptible(m)
/*
* mutex_up
(void)s;
}
+int __down_interruptible(cfs_semaphore_t *s)
+{
+ LASSERT(s != NULL);
+ (void)s;
+ return 0;
+}
+
void __up(cfs_semaphore_t *s)
{
LASSERT(s != NULL);
#endif
if ((iot == CIT_WRITE) &&
!(cio->cui_fd->fd_flags & LL_FILE_GROUP_LOCKED)) {
- cfs_down(&lli->lli_write_sem);
+ if(cfs_down_interruptible(&lli->lli_write_sem))
+ GOTO(out, result = -ERESTARTSYS);
write_sem_locked = 1;
}
break;
result = io->ci_nob;
*ppos = io->u.ci_wr.wr.crw_pos;
}
+ GOTO(out, result);
+out:
cl_io_fini(env, io);
- RETURN(result);
+ return result;
}