diff options
Diffstat (limited to 'fs/ext2')
-rw-r--r-- | fs/ext2/dir.c | 8 | ||||
-rw-r--r-- | fs/ext2/ext2.h | 10 | ||||
-rw-r--r-- | fs/ext2/file.c | 2 | ||||
-rw-r--r-- | fs/ext2/namei.c | 4 | ||||
-rw-r--r-- | fs/ext2/super.c | 6 | ||||
-rw-r--r-- | fs/ext2/symlink.c | 4 |
6 files changed, 23 insertions, 11 deletions
diff --git a/fs/ext2/dir.c b/fs/ext2/dir.c index 0b02ba9642d2..e89bfc8cf957 100644 --- a/fs/ext2/dir.c +++ b/fs/ext2/dir.c | |||
@@ -368,6 +368,14 @@ struct ext2_dir_entry_2 * ext2_find_entry (struct inode * dir, | |||
368 | } | 368 | } |
369 | if (++n >= npages) | 369 | if (++n >= npages) |
370 | n = 0; | 370 | n = 0; |
371 | /* next page is past the blocks we've got */ | ||
372 | if (unlikely(n > (dir->i_blocks >> (PAGE_CACHE_SHIFT - 9)))) { | ||
373 | ext2_error(dir->i_sb, __FUNCTION__, | ||
374 | "dir %lu size %lld exceeds block count %llu", | ||
375 | dir->i_ino, dir->i_size, | ||
376 | (unsigned long long)dir->i_blocks); | ||
377 | goto out; | ||
378 | } | ||
371 | } while (n != start); | 379 | } while (n != start); |
372 | out: | 380 | out: |
373 | return NULL; | 381 | return NULL; |
diff --git a/fs/ext2/ext2.h b/fs/ext2/ext2.h index c19ac153f56b..e2a0ea50af1d 100644 --- a/fs/ext2/ext2.h +++ b/fs/ext2/ext2.h | |||
@@ -158,7 +158,7 @@ extern void ext2_write_super (struct super_block *); | |||
158 | extern const struct file_operations ext2_dir_operations; | 158 | extern const struct file_operations ext2_dir_operations; |
159 | 159 | ||
160 | /* file.c */ | 160 | /* file.c */ |
161 | extern struct inode_operations ext2_file_inode_operations; | 161 | extern const struct inode_operations ext2_file_inode_operations; |
162 | extern const struct file_operations ext2_file_operations; | 162 | extern const struct file_operations ext2_file_operations; |
163 | extern const struct file_operations ext2_xip_file_operations; | 163 | extern const struct file_operations ext2_xip_file_operations; |
164 | 164 | ||
@@ -168,9 +168,9 @@ extern const struct address_space_operations ext2_aops_xip; | |||
168 | extern const struct address_space_operations ext2_nobh_aops; | 168 | extern const struct address_space_operations ext2_nobh_aops; |
169 | 169 | ||
170 | /* namei.c */ | 170 | /* namei.c */ |
171 | extern struct inode_operations ext2_dir_inode_operations; | 171 | extern const struct inode_operations ext2_dir_inode_operations; |
172 | extern struct inode_operations ext2_special_inode_operations; | 172 | extern const struct inode_operations ext2_special_inode_operations; |
173 | 173 | ||
174 | /* symlink.c */ | 174 | /* symlink.c */ |
175 | extern struct inode_operations ext2_fast_symlink_inode_operations; | 175 | extern const struct inode_operations ext2_fast_symlink_inode_operations; |
176 | extern struct inode_operations ext2_symlink_inode_operations; | 176 | extern const struct inode_operations ext2_symlink_inode_operations; |
diff --git a/fs/ext2/file.c b/fs/ext2/file.c index 2dba473c524a..566d4e2d3852 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c | |||
@@ -75,7 +75,7 @@ const struct file_operations ext2_xip_file_operations = { | |||
75 | }; | 75 | }; |
76 | #endif | 76 | #endif |
77 | 77 | ||
78 | struct inode_operations ext2_file_inode_operations = { | 78 | const struct inode_operations ext2_file_inode_operations = { |
79 | .truncate = ext2_truncate, | 79 | .truncate = ext2_truncate, |
80 | #ifdef CONFIG_EXT2_FS_XATTR | 80 | #ifdef CONFIG_EXT2_FS_XATTR |
81 | .setxattr = generic_setxattr, | 81 | .setxattr = generic_setxattr, |
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index e1af5b4cf80c..e69beed839ac 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c | |||
@@ -373,7 +373,7 @@ out: | |||
373 | return err; | 373 | return err; |
374 | } | 374 | } |
375 | 375 | ||
376 | struct inode_operations ext2_dir_inode_operations = { | 376 | const struct inode_operations ext2_dir_inode_operations = { |
377 | .create = ext2_create, | 377 | .create = ext2_create, |
378 | .lookup = ext2_lookup, | 378 | .lookup = ext2_lookup, |
379 | .link = ext2_link, | 379 | .link = ext2_link, |
@@ -393,7 +393,7 @@ struct inode_operations ext2_dir_inode_operations = { | |||
393 | .permission = ext2_permission, | 393 | .permission = ext2_permission, |
394 | }; | 394 | }; |
395 | 395 | ||
396 | struct inode_operations ext2_special_inode_operations = { | 396 | const struct inode_operations ext2_special_inode_operations = { |
397 | #ifdef CONFIG_EXT2_FS_XATTR | 397 | #ifdef CONFIG_EXT2_FS_XATTR |
398 | .setxattr = generic_setxattr, | 398 | .setxattr = generic_setxattr, |
399 | .getxattr = generic_getxattr, | 399 | .getxattr = generic_getxattr, |
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 6347c2dbdd81..a046a419d8af 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
@@ -231,7 +231,7 @@ static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, siz | |||
231 | static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off); | 231 | static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off); |
232 | #endif | 232 | #endif |
233 | 233 | ||
234 | static struct super_operations ext2_sops = { | 234 | static const struct super_operations ext2_sops = { |
235 | .alloc_inode = ext2_alloc_inode, | 235 | .alloc_inode = ext2_alloc_inode, |
236 | .destroy_inode = ext2_destroy_inode, | 236 | .destroy_inode = ext2_destroy_inode, |
237 | .read_inode = ext2_read_inode, | 237 | .read_inode = ext2_read_inode, |
@@ -708,10 +708,14 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) | |||
708 | set_opt(sbi->s_mount_opt, GRPID); | 708 | set_opt(sbi->s_mount_opt, GRPID); |
709 | if (def_mount_opts & EXT2_DEFM_UID16) | 709 | if (def_mount_opts & EXT2_DEFM_UID16) |
710 | set_opt(sbi->s_mount_opt, NO_UID32); | 710 | set_opt(sbi->s_mount_opt, NO_UID32); |
711 | #ifdef CONFIG_EXT2_FS_XATTR | ||
711 | if (def_mount_opts & EXT2_DEFM_XATTR_USER) | 712 | if (def_mount_opts & EXT2_DEFM_XATTR_USER) |
712 | set_opt(sbi->s_mount_opt, XATTR_USER); | 713 | set_opt(sbi->s_mount_opt, XATTR_USER); |
714 | #endif | ||
715 | #ifdef CONFIG_EXT2_FS_POSIX_ACL | ||
713 | if (def_mount_opts & EXT2_DEFM_ACL) | 716 | if (def_mount_opts & EXT2_DEFM_ACL) |
714 | set_opt(sbi->s_mount_opt, POSIX_ACL); | 717 | set_opt(sbi->s_mount_opt, POSIX_ACL); |
718 | #endif | ||
715 | 719 | ||
716 | if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC) | 720 | if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC) |
717 | set_opt(sbi->s_mount_opt, ERRORS_PANIC); | 721 | set_opt(sbi->s_mount_opt, ERRORS_PANIC); |
diff --git a/fs/ext2/symlink.c b/fs/ext2/symlink.c index 1e67d87cfa91..4e2426e22bbe 100644 --- a/fs/ext2/symlink.c +++ b/fs/ext2/symlink.c | |||
@@ -28,7 +28,7 @@ static void *ext2_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
28 | return NULL; | 28 | return NULL; |
29 | } | 29 | } |
30 | 30 | ||
31 | struct inode_operations ext2_symlink_inode_operations = { | 31 | const struct inode_operations ext2_symlink_inode_operations = { |
32 | .readlink = generic_readlink, | 32 | .readlink = generic_readlink, |
33 | .follow_link = page_follow_link_light, | 33 | .follow_link = page_follow_link_light, |
34 | .put_link = page_put_link, | 34 | .put_link = page_put_link, |
@@ -40,7 +40,7 @@ struct inode_operations ext2_symlink_inode_operations = { | |||
40 | #endif | 40 | #endif |
41 | }; | 41 | }; |
42 | 42 | ||
43 | struct inode_operations ext2_fast_symlink_inode_operations = { | 43 | const struct inode_operations ext2_fast_symlink_inode_operations = { |
44 | .readlink = generic_readlink, | 44 | .readlink = generic_readlink, |
45 | .follow_link = ext2_follow_link, | 45 | .follow_link = ext2_follow_link, |
46 | #ifdef CONFIG_EXT2_FS_XATTR | 46 | #ifdef CONFIG_EXT2_FS_XATTR |