]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/linux/pagemap.h
Add lock_page_killable
[linux-2.6-omap-h63xx.git] / include / linux / pagemap.h
index db8a410ae9e15a6daf9b64678fd3edefccdcc717..4b62a105622b1e8e38b294a32f426a42be0a8861 100644 (file)
@@ -157,6 +157,7 @@ static inline pgoff_t linear_page_index(struct vm_area_struct *vma,
 }
 
 extern void FASTCALL(__lock_page(struct page *page));
+extern int FASTCALL(__lock_page_killable(struct page *page));
 extern void FASTCALL(__lock_page_nosync(struct page *page));
 extern void FASTCALL(unlock_page(struct page *page));
 
@@ -170,6 +171,19 @@ static inline void lock_page(struct page *page)
                __lock_page(page);
 }
 
+/*
+ * lock_page_killable is like lock_page but can be interrupted by fatal
+ * signals.  It returns 0 if it locked the page and -EINTR if it was
+ * killed while waiting.
+ */
+static inline int lock_page_killable(struct page *page)
+{
+       might_sleep();
+       if (TestSetPageLocked(page))
+               return __lock_page_killable(page);
+       return 0;
+}
+
 /*
  * lock_page_nosync should only be used if we can't pin the page's inode.
  * Doesn't play quite so well with block device plugging.