Skip to content

Commit 90011c7

Browse files
Russell KingAl Viro
authored andcommitted
fs/adfs: dir: add helper to read directory using inode
Add a helper to read a directory using the inode, which we do in two places. Signed-off-by: Russell King <[email protected]> Signed-off-by: Al Viro <[email protected]>
1 parent 419a6e5 commit 90011c7

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

fs/adfs/dir.c

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,26 @@ static int adfs_dir_read(struct super_block *sb, u32 indaddr,
137137
return ADFS_SB(sb)->s_dir->read(sb, indaddr, size, dir);
138138
}
139139

140+
static int adfs_dir_read_inode(struct super_block *sb, struct inode *inode,
141+
struct adfs_dir *dir)
142+
{
143+
int ret;
144+
145+
ret = adfs_dir_read(sb, inode->i_ino, inode->i_size, dir);
146+
if (ret)
147+
return ret;
148+
149+
if (ADFS_I(inode)->parent_id != dir->parent_id) {
150+
adfs_error(sb,
151+
"parent directory id changed under me! (%06x but got %06x)\n",
152+
ADFS_I(inode)->parent_id, dir->parent_id);
153+
adfs_dir_relse(dir);
154+
ret = -EIO;
155+
}
156+
157+
return ret;
158+
}
159+
140160
static int adfs_dir_sync(struct adfs_dir *dir)
141161
{
142162
int err = 0;
@@ -203,7 +223,7 @@ adfs_readdir(struct file *file, struct dir_context *ctx)
203223
if (ctx->pos >> 32)
204224
return 0;
205225

206-
ret = adfs_dir_read(sb, inode->i_ino, inode->i_size, &dir);
226+
ret = adfs_dir_read_inode(sb, inode, &dir);
207227
if (ret)
208228
return ret;
209229

@@ -304,18 +324,10 @@ static int adfs_dir_lookup_byname(struct inode *inode, const struct qstr *qstr,
304324
u32 name_len;
305325
int ret;
306326

307-
ret = adfs_dir_read(sb, inode->i_ino, inode->i_size, &dir);
327+
ret = adfs_dir_read_inode(sb, inode, &dir);
308328
if (ret)
309329
goto out;
310330

311-
if (ADFS_I(inode)->parent_id != dir.parent_id) {
312-
adfs_error(sb,
313-
"parent directory changed under me! (%06x but got %06x)\n",
314-
ADFS_I(inode)->parent_id, dir.parent_id);
315-
ret = -EIO;
316-
goto free_out;
317-
}
318-
319331
obj->parent_id = inode->i_ino;
320332

321333
read_lock(&adfs_dir_lock);

0 commit comments

Comments
 (0)