if (LAFSI(b->b.inode)->type == TypeInodeFile &&
b->my_inode &&
LAFSI(b->my_inode)->iblock) {
- struct indexblock *ib = lafs_make_iblock(b->my_inode, 1, 0,
+ struct indexblock *ib = lafs_make_iblock(b->my_inode, ADOPT, SYNC,
MKREF(pindb));
if (IS_ERR(ib))
blk = getref(&b->b, MKREF(pindb));
LAFSI(ino)->filesys->i_ino != fsnum) {
if (ino)
iput(ino);
- ino = lafs_iget_fs(fs, fsnum, inum, 1);
+ ino = lafs_iget_fs(fs, fsnum, inum, ASYNC);
}
if (IS_ERR(ino)) {
/* FIXME check that this is -EAGAIN
&doh);
err = dir_log_prepare(&uh, fs, &to->d_name) ?: err;
- inodb = lafs_inode_dblock(dir, 0, MKREF(link));
+ inodb = lafs_inode_dblock(dir, SYNC, MKREF(link));
if (IS_ERR(inodb))
err = PTR_ERR(inodb);
if (err)
err = dir_delete_prepare(fs, dir, de->d_name.name, de->d_name.len,
&doh);
err = dir_log_prepare(&uh, fs, &de->d_name) ?: err;
- inodb = lafs_inode_dblock(inode, 0, MKREF(inode_update));
+ inodb = lafs_inode_dblock(inode, SYNC, MKREF(inode_update));
if (IS_ERR(inodb))
err = PTR_ERR(inodb);
if (last && !err)
err = dir_delete_prepare(fs, dir, de->d_name.name, de->d_name.len,
&doh);
err = dir_log_prepare(&uh, fs, &de->d_name) ?: err;
- inodb = lafs_inode_dblock(inode, 0, MKREF(inode_update));
+ inodb = lafs_inode_dblock(inode, SYNC, MKREF(inode_update));
if (IS_ERR(inodb))
err = PTR_ERR(inodb);
if (!err)
&old_doh);
err = dir_log_prepare(&old_uh, fs, &old_dentry->d_name) ?: err;
err = dir_log_prepare(&new_uh, fs, &new_dentry->d_name) ?: err;
- olddb = lafs_inode_dblock(old_inode, 0, MKREF(inode_update));
+ olddb = lafs_inode_dblock(old_inode, SYNC, MKREF(inode_update));
if (IS_ERR(olddb))
err = PTR_ERR(olddb);
new_dentry->d_name.name,
new_dentry->d_name.len,
&new_doh) ?: err;
- newdb = lafs_inode_dblock(new_inode, 0, MKREF(inode_update));
+ newdb = lafs_inode_dblock(new_inode, SYNC, MKREF(inode_update));
if (IS_ERR(newdb))
err = PTR_ERR(newdb);
if (last && !err)
if (err < 0)
ERR_PTR(err);
- ino = lafs_iget(dir->i_sb, inum, 0);
+ ino = lafs_iget(dir->i_sb, inum, SYNC);
if (IS_ERR(ino))
return ERR_PTR(PTR_ERR(ino));
break;
}
- err = lafs_find_block(b, 0);
+ err = lafs_find_block(b, NOADOPT);
if (err) {
putdref(b, MKREF(readpage));
break;
lafs_get_block(ino, i, page, GFP_KERNEL, MKREF(write));
if (start != (first << bits)) {
- err = lafs_find_block(fb, 0);
+ err = lafs_find_block(fb, NOADOPT);
if (!err)
err = lafs_load_block(&fb->b);
if (err)
end != ((last+1) << bits)) {
struct datablock *lb = fb + last - first;
- err = lafs_find_block(lb, 1);
+ err = lafs_find_block(lb, ADOPT);
if (!err)
err = lafs_load_block(&lb->b);
if (err)
* the page to be clean.
* so write the inode.
*/
- struct datablock *b = lafs_inode_dblock(ino, 0,
+ struct datablock *b = lafs_inode_dblock(ino, SYNC,
MKREF(writepageflush));
if (test_bit(B_Dirty, &b->b.flags)) {
lafs_iolock_written(&b->b);
if (lai->depth == 0) {
if (*addrp == 0)
return 1;
- leaf = lafs_make_iblock(ino, 0, 0, MKREF(find_next));
+ leaf = lafs_make_iblock(ino, NOADOPT, SYNC, MKREF(find_next));
if (IS_ERR(leaf))
return PTR_ERR(leaf);
nextd = 0xFFFFFFFF;
} else {
- leaf = lafs_leaf_find(ino, *addrp, 0, &nexti, 0,
+ leaf = lafs_leaf_find(ino, *addrp, NOADOPT, &nexti, SYNC,
MKREF(find_next));
/* FIXME what if 'leaf' is an error?? */
offset = 0;
/* Need to hold a reference to dblock while calling
* __lafs_find_next
*/
- struct datablock *db = lafs_inode_dblock(ino, 0, MKREF(find_nexti));
+ struct datablock *db = lafs_inode_dblock(ino, SYNC, MKREF(find_nexti));
if (IS_ERR(db))
return PTR_ERR(db);
if (!b)
return -ENOMEM;
- rv = lafs_find_block(b, 0);
+ rv = lafs_find_block(b, NOADOPT);
if (rv) {
putdref(b, MKREF(find_next));
return rv;
int __must_check
lafs_find_block(struct datablock *b, int adopt)
{
- return find_block(b, adopt, 0);
+ return find_block(b, adopt, SYNC);
}
int __must_check
lafs_find_block_async(struct datablock *b)
{
- return find_block(b, 1, 1);
+ return find_block(b, ADOPT, ASYNC);
}
/*
return;
}
- ib = lafs_make_iblock(ino, 1, 0, MKREF(inode_handle_orphan));
+ ib = lafs_make_iblock(ino, ADOPT, SYNC, MKREF(inode_handle_orphan));
if (IS_ERR(ib))
return;
putiref(ib, MKREF(inode_handle_orphan));
- ib = lafs_leaf_find(ino, trunc_next, 1, &next_trunc,
- 1, MKREF(inode_handle_orphan3));
+ ib = lafs_leaf_find(ino, trunc_next, ADOPT, &next_trunc,
+ ASYNC, MKREF(inode_handle_orphan3));
if (IS_ERR(ib))
return;
if (wait == 0)
return 0;
- b = lafs_inode_dblock(ino, 0, MKREF(write_inode));
+ b = lafs_inode_dblock(ino, SYNC, MKREF(write_inode));
if (IS_ERR(b)) /* FIXME should I mark something clean?? */
return PTR_ERR(b);
choose_free_inum(struct fs *fs, struct inode *filesys, u32 *inump,
struct datablock **bp, int *restarted)
{
- struct inode *im = lafs_iget(filesys->i_sb, 1, 0);
+ struct inode *im = lafs_iget(filesys->i_sb, 1, SYNC);
loff_t bnum;
struct datablock *b;
char *buf;
if (!b)
goto abort;
*bp = b;
- err = lafs_find_block(b, 0);
+ err = lafs_find_block(b, NOADOPT);
if (err)
goto abort;
if (b->b.physaddr == 0 && !test_bit(B_Valid, &b->b.flags)) {
lafs_iounlock_block(&b->b);
inode_map_new_commit(&imni);
- ino = lafs_iget(dir->i_sb, b->b.fileaddr, 0);
+ ino = lafs_iget(dir->i_sb, b->b.fileaddr, SYNC);
if (IS_ERR(ino)) {
lafs_cluster_update_abort(&ui);
LAFS_BUG(1, &b->b);
static int inode_map_free(struct fs *fs, struct inode *filesys, u32 inum)
{
- struct inode *im = lafs_iget(filesys->i_sb, 1, 0);
+ struct inode *im = lafs_iget(filesys->i_sb, 1, SYNC);
int bit;
unsigned long *buf;
struct datablock *b;
struct datablock *db;
err = inode_change_ok(ino, attr);
- db = lafs_inode_dblock(ino, 0, MKREF(setattr));
+ db = lafs_inode_dblock(ino, SYNC, MKREF(setattr));
if (IS_ERR(db))
err = PTR_ERR(db);
if (err)
* So just start the background truncate
*/
struct fs *fs = fs_from_inode(ino);
- struct datablock *db = lafs_inode_dblock(ino, 0, MKREF(trunc));
+ struct datablock *db = lafs_inode_dblock(ino, SYNC, MKREF(trunc));
if (IS_ERR(db))
return;
if (test_bit(B_Valid, &b->b.flags))
return 0;
- rv = lafs_find_block(b, 0);
+ rv = lafs_find_block(b, NOADOPT);
if (rv)
return rv;
rv = lafs_load_block(&b->b);
extern struct address_space_operations lafs_index_operations;
+#define SYNC 0
+#define ASYNC 1
+
+#define NOADOPT 0
+#define ADOPT 1
+
typedef u32 faddr_t;
typedef u64 paddr_t;
typedef u64 vaddr_t;
if (flg)
return 0; /* old stuff isn't interesting, or even possible */
- inode = lafs_iget_fs(fs, fsnum, inum, 0);
+ inode = lafs_iget_fs(fs, fsnum, inum, SYNC);
if (IS_ERR(inode))
return PTR_ERR(inode);
BUG_ON(fsnum); /* FIXME should be more careful */
iput(inode);
- inode = lafs_iget_fs(fs, inum, bnum, 0);
+ inode = lafs_iget_fs(fs, inum, bnum, SYNC);
if (IS_ERR(inode)) {
err = PTR_ERR(inode);
if (err == -EIO && offset == 0) {
}
return PTR_ERR(inode);
}
- db = lafs_inode_dblock(inode, 0, MKREF(roll));
+ db = lafs_inode_dblock(inode, SYNC, MKREF(roll));
buf = map_dblock(db);
/* FIXME do I sync the inode back to the datablock first? */
memcpy(buf+offset, data, len);
(unsigned long long)baddr);
/* find/load the inode */
- inode = lafs_iget_fs(fs, fsnum, inum, 0);
+ inode = lafs_iget_fs(fs, fsnum, inum, SYNC);
if (IS_ERR(inode))
return PTR_ERR(inode);
if (!blk)
break;
- err = lafs_find_block(blk, 1);
+ err = lafs_find_block(blk, ADOPT);
if (err)
break;
unlock_new_inode(root);
/* FIXME lots of error checking */
- rootdir = lafs_iget(fs->prime_sb, 2, 0);
+ rootdir = lafs_iget(fs->prime_sb, 2, SYNC);
err = PTR_ERR(rootdir);
if (IS_ERR(rootdir))
goto err2;
goto err2;
fs->prime_sb->s_root = de;
- fs->orphans = lafs_iget(fs->prime_sb, 8, 0);
+ fs->orphans = lafs_iget(fs->prime_sb, 8, SYNC);
for (d = 0; d < fs->devices ; d++) {
fs->devs[d].segsum = lafs_iget(fs->prime_sb,
fs->devs[d].usage_inum,
- 0);
+ SYNC);
}
lafs_checkpoint_lock(fs);
err = roll_forward(fs);
goto fail;
}
unlock_new_inode(fs->ss[s].root);
- rootdir = lafs_iget(sb, 2, 0);
+ rootdir = lafs_iget(sb, 2, SYNC);
sb->s_root = d_alloc_root(rootdir);
sb->s_op = fs->prime_sb->s_op;
sb2 = sget(&lafs_fs_type, match_one, discard_one, fs->prime_sb);