#include <linux/kernel.h>
#include <linux/sched/signal.h>
#include <linux/syscalls.h>
#include <linux/percpu.h>
#include <linux/capability.h>
#include <linux/blkdev.h>
#include <linux/quotaops.h>
#include <linux/highmem.h>
#include <linux/export.h>
#include <linux/backing-dev.h>
#include <linux/writeback.h>
#include <linux/suspend.h>
#include <linux/buffer_head.h>
#include <linux/task_io_accounting_ops.h>
#include <linux/bitops.h>
#include <linux/bit_spinlock.h>
#include <linux/pagevec.h>
#include <linux/sched/mm.h>
#include <trace/events/block.h>
static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
enum rw_hint hint, struct writeback_control *wbc);
#define BH_ENTRY(list) list_entry((list), struct buffer_head, b_assoc_buffers)
inline void touch_buffer(struct buffer_head *bh)
trace_block_touch_buffer(bh);
mark_page_accessed(bh->b_page);
EXPORT_SYMBOL(touch_buffer);
void __lock_buffer(struct buffer_head *bh)
wait_on_bit_lock_io(&bh->b_state, BH_Lock, TASK_UNINTERRUPTIBLE);
EXPORT_SYMBOL(__lock_buffer);
void unlock_buffer(struct buffer_head *bh)
clear_bit_unlock(BH_Lock, &bh->b_state);
wake_up_bit(&bh->b_state, BH_Lock);
EXPORT_SYMBOL(unlock_buffer);
void buffer_check_dirty_writeback(struct page *page,
bool *dirty, bool *writeback)
struct buffer_head *head, *bh;
BUG_ON(!PageLocked(page));
if (!page_has_buffers(page))