]> git.samba.org - sfrench/cifs-2.6.git/blobdiff - kernel/locking/rwsem.c
Merge branch 'linus' into core/objtool, to pick up dependent commits
[sfrench/cifs-2.6.git] / kernel / locking / rwsem.c
index a6c76a4832b40d60dacafaa33490c3a30eb77c70..f549c552dbf1e376a412efc1cb7a95a7029f2f7a 100644 (file)
@@ -29,6 +29,22 @@ void __sched down_read(struct rw_semaphore *sem)
 
 EXPORT_SYMBOL(down_read);
 
+int __sched down_read_killable(struct rw_semaphore *sem)
+{
+       might_sleep();
+       rwsem_acquire_read(&sem->dep_map, 0, 0, _RET_IP_);
+
+       if (LOCK_CONTENDED_RETURN(sem, __down_read_trylock, __down_read_killable)) {
+               rwsem_release(&sem->dep_map, 1, _RET_IP_);
+               return -EINTR;
+       }
+
+       rwsem_set_reader_owned(sem);
+       return 0;
+}
+
+EXPORT_SYMBOL(down_read_killable);
+
 /*
  * trylock for reading -- returns 1 if successful, 0 if contention
  */