summaryrefslogtreecommitdiff
path: root/fs/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/buffer.c')
-rw-r--r--fs/buffer.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/buffer.c b/fs/buffer.c
index 56c9f4e03bdd..d3fbedea7a1a 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -319,6 +319,7 @@ asmlinkage long sys_fsync(unsigned int fd)
/* We need to protect against concurrent writers.. */
down(&inode->i_sem);
+ current->flags |= PF_SYNCWRITE;
ret = filemap_fdatawrite(inode->i_mapping);
err = file->f_op->fsync(file, dentry, 0);
if (!ret)
@@ -326,6 +327,7 @@ asmlinkage long sys_fsync(unsigned int fd)
err = filemap_fdatawait(inode->i_mapping);
if (!ret)
ret = err;
+ current->flags &= ~PF_SYNCWRITE;
up(&inode->i_sem);
out_putf:
@@ -354,6 +356,7 @@ asmlinkage long sys_fdatasync(unsigned int fd)
goto out_putf;
down(&inode->i_sem);
+ current->flags |= PF_SYNCWRITE;
ret = filemap_fdatawrite(inode->i_mapping);
err = file->f_op->fsync(file, dentry, 1);
if (!ret)
@@ -361,6 +364,7 @@ asmlinkage long sys_fdatasync(unsigned int fd)
err = filemap_fdatawait(inode->i_mapping);
if (!ret)
ret = err;
+ current->flags &= ~PF_SYNCWRITE;
up(&inode->i_sem);
out_putf:
@@ -1447,6 +1451,17 @@ __getblk(struct block_device *bdev, sector_t block, int size)
}
EXPORT_SYMBOL(__getblk);
+/*
+ * Do async read-ahead on a buffer..
+ */
+void __breadahead(struct block_device *bdev, sector_t block, int size)
+{
+ struct buffer_head *bh = __getblk(bdev, block, size);
+ ll_rw_block(READA, 1, &bh);
+ brelse(bh);
+}
+EXPORT_SYMBOL(__breadahead);
+
/**
* __bread() - reads a specified block and returns the bh
* @block: number of block