The rwsem API in brief The rwsem API looks like: #include void init_rwsem(struct rw_semaphore *sem); void down_read(struct rw_semaphore *sem); int down_read_trylock(struct rw_semaphore *sem); /* non-zero = success! */ void up_read(struct rw_semaphore *sem); void down_write(struct rw_semaphore *sem); int down_write_trylock(struct rw_semaphore *sem); void up_write(struct rw_semaphore *sem); There is no interruptible version