|
@@ -25,6 +25,45 @@
|
|
|
#include <linux/buffer_head.h>
|
|
|
#include "internal.h"
|
|
|
|
|
|
+
|
|
|
+/**
|
|
|
+ * writeback_acquire - attempt to get exclusive writeback access to a device
|
|
|
+ * @bdi: the device's backing_dev_info structure
|
|
|
+ *
|
|
|
+ * It is a waste of resources to have more than one pdflush thread blocked on
|
|
|
+ * a single request queue. Exclusion at the request_queue level is obtained
|
|
|
+ * via a flag in the request_queue's backing_dev_info.state.
|
|
|
+ *
|
|
|
+ * Non-request_queue-backed address_spaces will share default_backing_dev_info,
|
|
|
+ * unless they implement their own. Which is somewhat inefficient, as this
|
|
|
+ * may prevent concurrent writeback against multiple devices.
|
|
|
+ */
|
|
|
+static int writeback_acquire(struct backing_dev_info *bdi)
|
|
|
+{
|
|
|
+ return !test_and_set_bit(BDI_pdflush, &bdi->state);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * writeback_in_progress - determine whether there is writeback in progress
|
|
|
+ * @bdi: the device's backing_dev_info structure.
|
|
|
+ *
|
|
|
+ * Determine whether there is writeback in progress against a backing device.
|
|
|
+ */
|
|
|
+int writeback_in_progress(struct backing_dev_info *bdi)
|
|
|
+{
|
|
|
+ return test_bit(BDI_pdflush, &bdi->state);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * writeback_release - relinquish exclusive writeback access against a device.
|
|
|
+ * @bdi: the device's backing_dev_info structure
|
|
|
+ */
|
|
|
+static void writeback_release(struct backing_dev_info *bdi)
|
|
|
+{
|
|
|
+ BUG_ON(!writeback_in_progress(bdi));
|
|
|
+ clear_bit(BDI_pdflush, &bdi->state);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* __mark_inode_dirty - internal function
|
|
|
* @inode: inode to mark
|
|
@@ -747,43 +786,4 @@ int generic_osync_inode(struct inode *inode, struct address_space *mapping, int
|
|
|
|
|
|
return err;
|
|
|
}
|
|
|
-
|
|
|
EXPORT_SYMBOL(generic_osync_inode);
|
|
|
-
|
|
|
-/**
|
|
|
- * writeback_acquire - attempt to get exclusive writeback access to a device
|
|
|
- * @bdi: the device's backing_dev_info structure
|
|
|
- *
|
|
|
- * It is a waste of resources to have more than one pdflush thread blocked on
|
|
|
- * a single request queue. Exclusion at the request_queue level is obtained
|
|
|
- * via a flag in the request_queue's backing_dev_info.state.
|
|
|
- *
|
|
|
- * Non-request_queue-backed address_spaces will share default_backing_dev_info,
|
|
|
- * unless they implement their own. Which is somewhat inefficient, as this
|
|
|
- * may prevent concurrent writeback against multiple devices.
|
|
|
- */
|
|
|
-int writeback_acquire(struct backing_dev_info *bdi)
|
|
|
-{
|
|
|
- return !test_and_set_bit(BDI_pdflush, &bdi->state);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * writeback_in_progress - determine whether there is writeback in progress
|
|
|
- * @bdi: the device's backing_dev_info structure.
|
|
|
- *
|
|
|
- * Determine whether there is writeback in progress against a backing device.
|
|
|
- */
|
|
|
-int writeback_in_progress(struct backing_dev_info *bdi)
|
|
|
-{
|
|
|
- return test_bit(BDI_pdflush, &bdi->state);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * writeback_release - relinquish exclusive writeback access against a device.
|
|
|
- * @bdi: the device's backing_dev_info structure
|
|
|
- */
|
|
|
-void writeback_release(struct backing_dev_info *bdi)
|
|
|
-{
|
|
|
- BUG_ON(!writeback_in_progress(bdi));
|
|
|
- clear_bit(BDI_pdflush, &bdi->state);
|
|
|
-}
|