Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81cc7fad authored by Vyacheslav Dubeyko's avatar Vyacheslav Dubeyko Committed by Linus Torvalds
Browse files

hfsplus: rework processing of hfs_btree_write() returned error



Add to hfs_btree_write() a return of -EIO on failure of b-tree node
searching.  Also add logic ofor processing errors from hfs_btree_write()
in hfsplus_system_write_inode() with a message about b-tree writing
failure.

[akpm@linux-foundation.org: reduce scope of `err', print errno on error]
Signed-off-by: default avatarVyacheslav Dubeyko <slava@dubeyko.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: default avatarHin-Tak Leung <htl10@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1b243fd3
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -159,7 +159,7 @@ void hfs_btree_close(struct hfs_btree *tree)
	kfree(tree);
	kfree(tree);
}
}


void hfs_btree_write(struct hfs_btree *tree)
int hfs_btree_write(struct hfs_btree *tree)
{
{
	struct hfs_btree_header_rec *head;
	struct hfs_btree_header_rec *head;
	struct hfs_bnode *node;
	struct hfs_bnode *node;
@@ -168,7 +168,7 @@ void hfs_btree_write(struct hfs_btree *tree)
	node = hfs_bnode_find(tree, 0);
	node = hfs_bnode_find(tree, 0);
	if (IS_ERR(node))
	if (IS_ERR(node))
		/* panic? */
		/* panic? */
		return;
		return -EIO;
	/* Load the header */
	/* Load the header */
	page = node->page[0];
	page = node->page[0];
	head = (struct hfs_btree_header_rec *)(kmap(page) +
	head = (struct hfs_btree_header_rec *)(kmap(page) +
@@ -186,6 +186,7 @@ void hfs_btree_write(struct hfs_btree *tree)
	kunmap(page);
	kunmap(page);
	set_page_dirty(page);
	set_page_dirty(page);
	hfs_bnode_put(node);
	hfs_bnode_put(node);
	return 0;
}
}


static struct hfs_bnode *hfs_bmap_new_bmap(struct hfs_bnode *prev, u32 idx)
static struct hfs_bnode *hfs_bmap_new_bmap(struct hfs_bnode *prev, u32 idx)
+1 −1
Original line number Original line Diff line number Diff line
@@ -335,7 +335,7 @@ int hfsplus_block_free(struct super_block *, u32, u32);
/* btree.c */
/* btree.c */
struct hfs_btree *hfs_btree_open(struct super_block *, u32);
struct hfs_btree *hfs_btree_open(struct super_block *, u32);
void hfs_btree_close(struct hfs_btree *);
void hfs_btree_close(struct hfs_btree *);
void hfs_btree_write(struct hfs_btree *);
int hfs_btree_write(struct hfs_btree *);
struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *);
struct hfs_bnode *hfs_bmap_alloc(struct hfs_btree *);
void hfs_bmap_free(struct hfs_bnode *);
void hfs_bmap_free(struct hfs_bnode *);


+8 −2
Original line number Original line Diff line number Diff line
@@ -127,8 +127,14 @@ static int hfsplus_system_write_inode(struct inode *inode)
		hfsplus_mark_mdb_dirty(inode->i_sb);
		hfsplus_mark_mdb_dirty(inode->i_sb);
	}
	}
	hfsplus_inode_write_fork(inode, fork);
	hfsplus_inode_write_fork(inode, fork);
	if (tree)
	if (tree) {
		hfs_btree_write(tree);
		int err = hfs_btree_write(tree);
		if (err) {
			printk(KERN_ERR "hfs: b-tree write err: %d, ino %lu\n",
					err, inode->i_ino);
			return err;
		}
	}
	return 0;
	return 0;
}
}