hc
2024-01-31 f9004dbfff8a3fbbd7e2a88c8a4327c7f2f8e5b2
kernel/fs/ext2/namei.c
....@@ -57,13 +57,17 @@
5757 {
5858 struct inode * inode;
5959 ino_t ino;
60
+ int res;
6061
6162 if (dentry->d_name.len > EXT2_NAME_LEN)
6263 return ERR_PTR(-ENAMETOOLONG);
6364
64
- ino = ext2_inode_by_name(dir, &dentry->d_name);
65
- inode = NULL;
66
- if (ino) {
65
+ res = ext2_inode_by_name(dir, &dentry->d_name, &ino);
66
+ if (res) {
67
+ if (res != -ENOENT)
68
+ return ERR_PTR(res);
69
+ inode = NULL;
70
+ } else {
6771 inode = ext2_iget(dir->i_sb, ino);
6872 if (inode == ERR_PTR(-ESTALE)) {
6973 ext2_error(dir->i_sb, __func__,
....@@ -78,9 +82,13 @@
7882 struct dentry *ext2_get_parent(struct dentry *child)
7983 {
8084 struct qstr dotdot = QSTR_INIT("..", 2);
81
- unsigned long ino = ext2_inode_by_name(d_inode(child), &dotdot);
82
- if (!ino)
83
- return ERR_PTR(-ENOENT);
85
+ ino_t ino;
86
+ int res;
87
+
88
+ res = ext2_inode_by_name(d_inode(child), &dotdot, &ino);
89
+ if (res)
90
+ return ERR_PTR(res);
91
+
8492 return d_obtain_alias(ext2_iget(child->d_sb, ino));
8593 }
8694
....@@ -136,9 +144,7 @@
136144 err = PTR_ERR(inode);
137145 if (!IS_ERR(inode)) {
138146 init_special_inode(inode, inode->i_mode, rdev);
139
-#ifdef CONFIG_EXT2_FS_XATTR
140147 inode->i_op = &ext2_special_inode_operations;
141
-#endif
142148 mark_inode_dirty(inode);
143149 err = ext2_add_nondir(dentry, inode);
144150 }
....@@ -276,9 +282,9 @@
276282 if (err)
277283 goto out;
278284
279
- de = ext2_find_entry (dir, &dentry->d_name, &page);
280
- if (!de) {
281
- err = -ENOENT;
285
+ de = ext2_find_entry(dir, &dentry->d_name, &page);
286
+ if (IS_ERR(de)) {
287
+ err = PTR_ERR(de);
282288 goto out;
283289 }
284290
....@@ -332,9 +338,9 @@
332338 if (err)
333339 goto out;
334340
335
- old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page);
336
- if (!old_de) {
337
- err = -ENOENT;
341
+ old_de = ext2_find_entry(old_dir, &old_dentry->d_name, &old_page);
342
+ if (IS_ERR(old_de)) {
343
+ err = PTR_ERR(old_de);
338344 goto out;
339345 }
340346
....@@ -353,10 +359,11 @@
353359 if (dir_de && !ext2_empty_dir (new_inode))
354360 goto out_dir;
355361
356
- err = -ENOENT;
357
- new_de = ext2_find_entry (new_dir, &new_dentry->d_name, &new_page);
358
- if (!new_de)
362
+ new_de = ext2_find_entry(new_dir, &new_dentry->d_name, &new_page);
363
+ if (IS_ERR(new_de)) {
364
+ err = PTR_ERR(new_de);
359365 goto out_dir;
366
+ }
360367 ext2_set_link(new_dir, new_de, new_page, old_inode, 1);
361368 new_inode->i_ctime = current_time(new_inode);
362369 if (dir_de)
....@@ -413,9 +420,8 @@
413420 .rmdir = ext2_rmdir,
414421 .mknod = ext2_mknod,
415422 .rename = ext2_rename,
416
-#ifdef CONFIG_EXT2_FS_XATTR
417423 .listxattr = ext2_listxattr,
418
-#endif
424
+ .getattr = ext2_getattr,
419425 .setattr = ext2_setattr,
420426 .get_acl = ext2_get_acl,
421427 .set_acl = ext2_set_acl,
....@@ -423,9 +429,8 @@
423429 };
424430
425431 const struct inode_operations ext2_special_inode_operations = {
426
-#ifdef CONFIG_EXT2_FS_XATTR
427432 .listxattr = ext2_listxattr,
428
-#endif
433
+ .getattr = ext2_getattr,
429434 .setattr = ext2_setattr,
430435 .get_acl = ext2_get_acl,
431436 .set_acl = ext2_set_acl,