]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/locking/rwsem.c
locking/rwsem: Add down_read_killable()
[mirror_ubuntu-bionic-kernel.git] / kernel / locking / rwsem.c
index 4d48b1c4870dda0b33c7f93e1aed01fe8b6ceb61..e53f7746d9fd0833cd19a01deba2ace13147cd98 100644 (file)
@@ -28,6 +28,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
  */