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

Commit 4134bf81 authored by Al Viro's avatar Al Viro
Browse files

qnx4: reduce the insane nesting in qnx4_checkroot()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1aab323e
Loading
Loading
Loading
Loading
+22 −34
Original line number Diff line number Diff line
@@ -179,46 +179,34 @@ static const char *qnx4_checkroot(struct super_block *sb)
	struct qnx4_inode_entry *rootdir;
	int rd, rl;
	int i, j;
	int found = 0;

	if (*(qnx4_sb(sb)->sb->RootDir.di_fname) != '/') {
	if (*(qnx4_sb(sb)->sb->RootDir.di_fname) != '/')
		return "no qnx4 filesystem (no root dir).";
	} else {
	QNX4DEBUG((KERN_NOTICE "QNX4 filesystem found on dev %s.\n", sb->s_id));
	rd = le32_to_cpu(qnx4_sb(sb)->sb->RootDir.di_first_xtnt.xtnt_blk) - 1;
	rl = le32_to_cpu(qnx4_sb(sb)->sb->RootDir.di_first_xtnt.xtnt_size);
	for (j = 0; j < rl; j++) {
		bh = sb_bread(sb, rd + j);	/* root dir, first block */
			if (bh == NULL) {
		if (bh == NULL)
			return "unable to read root entry.";
			}
			for (i = 0; i < QNX4_INODES_PER_BLOCK; i++) {
				rootdir = (struct qnx4_inode_entry *) (bh->b_data + i * QNX4_DIR_ENTRY_SIZE);
		rootdir = (struct qnx4_inode_entry *) bh->b_data;
		for (i = 0; i < QNX4_INODES_PER_BLOCK; i++, rootdir++) {
			QNX4DEBUG((KERN_INFO "rootdir entry found : [%s]\n", rootdir->di_fname));
				if (!strcmp(rootdir->di_fname,
					    QNX4_BMNAME)) {
					found = 1;
			if (strcmp(rootdir->di_fname, QNX4_BMNAME) != 0)
				continue;
			qnx4_sb(sb)->BitMap = kmemdup(rootdir,
						      sizeof(struct qnx4_inode_entry),
						      GFP_KERNEL);
					if (!qnx4_sb(sb)->BitMap) {
			brelse(bh);
			if (!qnx4_sb(sb)->BitMap)
				return "not enough memory for bitmap inode";
					}/* keep bitmap inode known */
					break;
				}
			/* keep bitmap inode known */
			return NULL;
		}
		brelse(bh);
			if (found != 0) {
				break;
			}
	}
		if (found == 0) {
	return "bitmap file not found.";
}
	}
	return NULL;
}

static int qnx4_fill_super(struct super_block *s, void *data, int silent)
{