/* Ok, we're actually changing the blocksize.. */
bdev = bdget(kdev_t_to_nr(dev));
- sync_buffers(bdev, 2);
+ sync_blockdev(bdev);
blksize_size[major(dev)][minor(dev)] = size;
bdev->bd_inode->i_blkbits = blksize_bits(size);
kill_bdev(bdev);
return retval;
}
-static int __block_fsync(struct inode * inode)
-{
- return sync_buffers(inode->i_bdev, 1);
-}
-
/*
* Filp may be NULL when we are called by an msync of a vma
* since the vma has no handle.
{
struct inode * inode = dentry->d_inode;
- return __block_fsync(inode);
+ return sync_blockdev(inode->i_bdev);
}
/*
lock_kernel();
switch (kind) {
case BDEV_FILE:
- __block_fsync(bd_inode);
- break;
case BDEV_FS:
- fsync_no_super(bdev);
+ sync_blockdev(bd_inode->i_bdev);
break;
}
if (!--bdev->bd_openers)
}
/*
- * write out all the dirty data associated with a block device
- * via its mapping. Does not take the superblock lock.
- *
- * If `wait' is true, wait on the writeout.
- *
- * FIXME: rename this function.
+ * Write out and wait upon all the dirty data associated with a block
+ * device via its mapping. Does not take the superblock lock.
*/
-int sync_buffers(struct block_device *bdev, int wait)
+int sync_blockdev(struct block_device *bdev)
{
- int ret;
+ int ret = 0;
- ret = filemap_fdatawrite(bdev->bd_inode->i_mapping);
- if (wait) {
+ if (bdev) {
int err;
+ ret = filemap_fdatawait(bdev->bd_inode->i_mapping);
+ err = filemap_fdatawrite(bdev->bd_inode->i_mapping);
+ if (!ret)
+ ret = err;
err = filemap_fdatawait(bdev->bd_inode->i_mapping);
if (!ret)
ret = err;
}
return ret;
}
-
-/*
- * Write out all the dirty data associated with a block device
- * via its mapping. Does not take the superblock lock.
- *
- * Wait on the writeout.
- */
-int fsync_no_super(struct block_device *bdev)
-{
- int ret = 0;
-
- if (bdev)
- ret = sync_buffers(bdev, 1);
- return ret;
-}
+EXPORT_SYMBOL(sync_blockdev);
/*
* Write out and wait upon all dirty data associated with this
sb->s_op->write_super(sb);
unlock_super(sb);
- return fsync_no_super(sb->s_bdev);
+ return sync_blockdev(sb->s_bdev);
}
/*
drop_super(sb);
return res;
}
- return fsync_no_super(bdev);
+ return sync_blockdev(bdev);
}
/*
unlock_super(sb);
/* .. finally sync the buffers to disk */
- ret = sync_buffers(sb->s_bdev, 1);
+ ret = sync_blockdev(sb->s_bdev);
return ret;
}
* floating about in memory - the physical journal device may
* hotswapped, and it breaks the `ro-after' testing code.
*/
- fsync_no_super(sbi->journal_bdev);
+ sync_blockdev(sbi->journal_bdev);
invalidate_bdev(sbi->journal_bdev, 0);
ext3_blkdev_remove(sbi);
}
journal->j_transaction_sequence = ++info.end_transaction;
journal_clear_revoke(journal);
- fsync_no_super(journal->j_fs_dev);
+ sync_blockdev(journal->j_fs_dev);
return err;
}
* We need to make sure all of the "written" metapages
* actually make it to disk
*/
- fsync_no_super(log->sb->s_bdev);
+ sync_blockdev(log->sb->s_bdev);
/*
* write the last SYNCPT record with syncpoint = 0
void invalidate_inode_buffers(struct inode *);
void invalidate_bdev(struct block_device *, int);
void __invalidate_buffers(kdev_t dev, int);
-int sync_buffers(struct block_device *, int);
+int sync_blockdev(struct block_device *bdev);
void __wait_on_buffer(struct buffer_head *);
void sleep_on_buffer(struct buffer_head *bh);
void wake_up_buffer(struct buffer_head *bh);
EXPORT_SYMBOL(truncate_inode_pages);
EXPORT_SYMBOL(fsync_dev);
EXPORT_SYMBOL(fsync_bdev);
-EXPORT_SYMBOL(fsync_no_super);
EXPORT_SYMBOL(permission);
EXPORT_SYMBOL(vfs_permission);
EXPORT_SYMBOL(inode_setattr);