int blocks = PAGE_SIZE >> ino->i_blkbits;
int i;
int redirty = 0;
- dprintk("WRITEPAGE %lu\n", page->index);
+ dprintk("WRITEPAGE %lu/%lu/%lu\n", ino_from_sb(ino->i_sb)->i_ino, ino->i_ino, page->index * blocks);
for (i = 0 ; i < blocks; i++) {
struct datablock *b = lafs_get_block(ino, i, page, GFP_KERNEL,
MKREF(writepage));
struct list_head flush_list; /* list of qents that need flushing */
struct list_head qhash[QHASHSIZE];
+ struct backing_dev_info bdi;
struct fs_dev {
struct block_device *bdev;
struct lafs_dev *devblk;
INIT_WORK(&fs->done_work, lafs_done_work);
+ /* FIXME add congention and unplug functions to this bdi */
+ err = bdi_init(&fs->bdi);
+ if (err)
+ goto abort;
+
+
fs->phase_locked = 0;
for (i = 0; i < WC_NUM; i++) {
int j;
}
if (fs->prime_sb->s_root) {
/* filesystem with this uuid already exists */
- kfree(k);
deactivate_locked_super(fs->prime_sb);
+ kfree(k);
fs->prime_sb = NULL;
err = -EBUSY;
goto abort;
}
+ err = bdi_register_dev(&fs->bdi, fs->prime_sb->s_dev);
+ if (err) {
+ deactivate_locked_super(fs->prime_sb);
+ kfree(k);
+ fs->prime_sb = NULL;
+ goto abort;
+ }
+ fs->prime_sb->s_bdi = &fs->bdi;
+
fs->prime_sb->s_blocksize = 1 << op->blockbits;
fs->prime_sb->s_blocksize_bits = op->blockbits;
fs->prime_sb->s_op = &lafs_sops;
return 0;
abort:
+ bdi_destroy(&fs->bdi);
kfree(fs->scan.free_usages);
lafs_segtrack_free(fs->segtrack);
kfree(fs->devs);
kill_anon_super(fs->prime_sb);
+ bdi_destroy(&fs->bdi);
+
for (i = 0; i < fs->devices; i++) {
struct fs_dev *dv = &fs->devs[i];
kfree(dv->devblk);
if (!li)
return NULL;
inode_init_once(&li->vfs_inode);
-
+ li->vfs_inode.i_data.backing_dev_info = sb->s_bdi;
li->iblock = NULL;
li->dblock = NULL;
li->update_cluster = 0;