diff options
author | Anton Altaparmakov <aia21@cantab.net> | 2005-10-31 05:06:46 -0500 |
---|---|---|
committer | Anton Altaparmakov <aia21@cantab.net> | 2005-10-31 05:06:46 -0500 |
commit | 1f04c0a24b2f3cfe89c802a24396263623e3512d (patch) | |
tree | d7e2216b6e65b833c0c2b79b478d13ce17dbf296 /fs/ext3 | |
parent | 07b188ab773e183871e57b33ae37bf635c9f12ba (diff) | |
parent | e2f2e58e7968f8446b1078a20a18bf8ea12b4fbc (diff) |
Merge branch 'master' of /usr/src/ntfs-2.6/
Diffstat (limited to 'fs/ext3')
-rw-r--r-- | fs/ext3/balloc.c | 7 | ||||
-rw-r--r-- | fs/ext3/bitmap.c | 2 | ||||
-rw-r--r-- | fs/ext3/bitmap.h | 8 | ||||
-rw-r--r-- | fs/ext3/ialloc.c | 3 | ||||
-rw-r--r-- | fs/ext3/inode.c | 11 | ||||
-rw-r--r-- | fs/ext3/namei.c | 2 | ||||
-rw-r--r-- | fs/ext3/namei.h | 8 | ||||
-rw-r--r-- | fs/ext3/resize.c | 10 | ||||
-rw-r--r-- | fs/ext3/super.c | 4 | ||||
-rw-r--r-- | fs/ext3/xattr.c | 8 |
10 files changed, 50 insertions, 13 deletions
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c index 0213db4911a2..7992d21e0e09 100644 --- a/fs/ext3/balloc.c +++ b/fs/ext3/balloc.c | |||
@@ -20,6 +20,8 @@ | |||
20 | #include <linux/quotaops.h> | 20 | #include <linux/quotaops.h> |
21 | #include <linux/buffer_head.h> | 21 | #include <linux/buffer_head.h> |
22 | 22 | ||
23 | #include "bitmap.h" | ||
24 | |||
23 | /* | 25 | /* |
24 | * balloc.c contains the blocks allocation and deallocation routines | 26 | * balloc.c contains the blocks allocation and deallocation routines |
25 | */ | 27 | */ |
@@ -1010,7 +1012,7 @@ retry: | |||
1010 | * allocation within the reservation window. | 1012 | * allocation within the reservation window. |
1011 | * | 1013 | * |
1012 | * This will avoid keeping on searching the reservation list again and | 1014 | * This will avoid keeping on searching the reservation list again and |
1013 | * again when someboday is looking for a free block (without | 1015 | * again when somebody is looking for a free block (without |
1014 | * reservation), and there are lots of free blocks, but they are all | 1016 | * reservation), and there are lots of free blocks, but they are all |
1015 | * being reserved. | 1017 | * being reserved. |
1016 | * | 1018 | * |
@@ -1416,12 +1418,12 @@ unsigned long ext3_count_free_blocks(struct super_block *sb) | |||
1416 | unsigned long bitmap_count, x; | 1418 | unsigned long bitmap_count, x; |
1417 | struct buffer_head *bitmap_bh = NULL; | 1419 | struct buffer_head *bitmap_bh = NULL; |
1418 | 1420 | ||
1419 | lock_super(sb); | ||
1420 | es = EXT3_SB(sb)->s_es; | 1421 | es = EXT3_SB(sb)->s_es; |
1421 | desc_count = 0; | 1422 | desc_count = 0; |
1422 | bitmap_count = 0; | 1423 | bitmap_count = 0; |
1423 | gdp = NULL; | 1424 | gdp = NULL; |
1424 | 1425 | ||
1426 | smp_rmb(); | ||
1425 | for (i = 0; i < ngroups; i++) { | 1427 | for (i = 0; i < ngroups; i++) { |
1426 | gdp = ext3_get_group_desc(sb, i, NULL); | 1428 | gdp = ext3_get_group_desc(sb, i, NULL); |
1427 | if (!gdp) | 1429 | if (!gdp) |
@@ -1440,7 +1442,6 @@ unsigned long ext3_count_free_blocks(struct super_block *sb) | |||
1440 | brelse(bitmap_bh); | 1442 | brelse(bitmap_bh); |
1441 | printk("ext3_count_free_blocks: stored = %u, computed = %lu, %lu\n", | 1443 | printk("ext3_count_free_blocks: stored = %u, computed = %lu, %lu\n", |
1442 | le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count); | 1444 | le32_to_cpu(es->s_free_blocks_count), desc_count, bitmap_count); |
1443 | unlock_super(sb); | ||
1444 | return bitmap_count; | 1445 | return bitmap_count; |
1445 | #else | 1446 | #else |
1446 | desc_count = 0; | 1447 | desc_count = 0; |
diff --git a/fs/ext3/bitmap.c b/fs/ext3/bitmap.c index 6c419b9ab0e8..5b4ba3e246e6 100644 --- a/fs/ext3/bitmap.c +++ b/fs/ext3/bitmap.c | |||
@@ -8,7 +8,7 @@ | |||
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/buffer_head.h> | 10 | #include <linux/buffer_head.h> |
11 | 11 | #include "bitmap.h" | |
12 | 12 | ||
13 | static int nibblemap[] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; | 13 | static int nibblemap[] = {4, 3, 3, 2, 3, 2, 2, 1, 3, 2, 2, 1, 2, 1, 1, 0}; |
14 | 14 | ||
diff --git a/fs/ext3/bitmap.h b/fs/ext3/bitmap.h new file mode 100644 index 000000000000..6ee503a6bb4e --- /dev/null +++ b/fs/ext3/bitmap.h | |||
@@ -0,0 +1,8 @@ | |||
1 | /* linux/fs/ext3/bitmap.c | ||
2 | * | ||
3 | * Copyright (C) 2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | extern unsigned long ext3_count_free (struct buffer_head *, unsigned int ); | ||
diff --git a/fs/ext3/ialloc.c b/fs/ext3/ialloc.c index 6549945f9ac1..df3f517c54ac 100644 --- a/fs/ext3/ialloc.c +++ b/fs/ext3/ialloc.c | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #include <asm/byteorder.h> | 27 | #include <asm/byteorder.h> |
28 | 28 | ||
29 | #include "bitmap.h" | ||
29 | #include "xattr.h" | 30 | #include "xattr.h" |
30 | #include "acl.h" | 31 | #include "acl.h" |
31 | 32 | ||
@@ -704,7 +705,6 @@ unsigned long ext3_count_free_inodes (struct super_block * sb) | |||
704 | unsigned long bitmap_count, x; | 705 | unsigned long bitmap_count, x; |
705 | struct buffer_head *bitmap_bh = NULL; | 706 | struct buffer_head *bitmap_bh = NULL; |
706 | 707 | ||
707 | lock_super (sb); | ||
708 | es = EXT3_SB(sb)->s_es; | 708 | es = EXT3_SB(sb)->s_es; |
709 | desc_count = 0; | 709 | desc_count = 0; |
710 | bitmap_count = 0; | 710 | bitmap_count = 0; |
@@ -727,7 +727,6 @@ unsigned long ext3_count_free_inodes (struct super_block * sb) | |||
727 | brelse(bitmap_bh); | 727 | brelse(bitmap_bh); |
728 | printk("ext3_count_free_inodes: stored = %u, computed = %lu, %lu\n", | 728 | printk("ext3_count_free_inodes: stored = %u, computed = %lu, %lu\n", |
729 | le32_to_cpu(es->s_free_inodes_count), desc_count, bitmap_count); | 729 | le32_to_cpu(es->s_free_inodes_count), desc_count, bitmap_count); |
730 | unlock_super(sb); | ||
731 | return desc_count; | 730 | return desc_count; |
732 | #else | 731 | #else |
733 | desc_count = 0; | 732 | desc_count = 0; |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 8b38f2232796..5d9b00e28837 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -491,7 +491,7 @@ static unsigned long ext3_find_goal(struct inode *inode, long block, | |||
491 | * the same format as ext3_get_branch() would do. We are calling it after | 491 | * the same format as ext3_get_branch() would do. We are calling it after |
492 | * we had read the existing part of chain and partial points to the last | 492 | * we had read the existing part of chain and partial points to the last |
493 | * triple of that (one with zero ->key). Upon the exit we have the same | 493 | * triple of that (one with zero ->key). Upon the exit we have the same |
494 | * picture as after the successful ext3_get_block(), excpet that in one | 494 | * picture as after the successful ext3_get_block(), except that in one |
495 | * place chain is disconnected - *branch->p is still zero (we did not | 495 | * place chain is disconnected - *branch->p is still zero (we did not |
496 | * set the last link), but branch->key contains the number that should | 496 | * set the last link), but branch->key contains the number that should |
497 | * be placed into *branch->p to fill that gap. | 497 | * be placed into *branch->p to fill that gap. |
@@ -523,7 +523,6 @@ static int ext3_alloc_branch(handle_t *handle, struct inode *inode, | |||
523 | if (!nr) | 523 | if (!nr) |
524 | break; | 524 | break; |
525 | branch[n].key = cpu_to_le32(nr); | 525 | branch[n].key = cpu_to_le32(nr); |
526 | keys = n+1; | ||
527 | 526 | ||
528 | /* | 527 | /* |
529 | * Get buffer_head for parent block, zero it out | 528 | * Get buffer_head for parent block, zero it out |
@@ -531,6 +530,9 @@ static int ext3_alloc_branch(handle_t *handle, struct inode *inode, | |||
531 | * parent to disk. | 530 | * parent to disk. |
532 | */ | 531 | */ |
533 | bh = sb_getblk(inode->i_sb, parent); | 532 | bh = sb_getblk(inode->i_sb, parent); |
533 | if (!bh) | ||
534 | break; | ||
535 | keys = n+1; | ||
534 | branch[n].bh = bh; | 536 | branch[n].bh = bh; |
535 | lock_buffer(bh); | 537 | lock_buffer(bh); |
536 | BUFFER_TRACE(bh, "call get_create_access"); | 538 | BUFFER_TRACE(bh, "call get_create_access"); |
@@ -864,6 +866,10 @@ struct buffer_head *ext3_getblk(handle_t *handle, struct inode * inode, | |||
864 | if (!*errp && buffer_mapped(&dummy)) { | 866 | if (!*errp && buffer_mapped(&dummy)) { |
865 | struct buffer_head *bh; | 867 | struct buffer_head *bh; |
866 | bh = sb_getblk(inode->i_sb, dummy.b_blocknr); | 868 | bh = sb_getblk(inode->i_sb, dummy.b_blocknr); |
869 | if (!bh) { | ||
870 | *errp = -EIO; | ||
871 | goto err; | ||
872 | } | ||
867 | if (buffer_new(&dummy)) { | 873 | if (buffer_new(&dummy)) { |
868 | J_ASSERT(create != 0); | 874 | J_ASSERT(create != 0); |
869 | J_ASSERT(handle != 0); | 875 | J_ASSERT(handle != 0); |
@@ -896,6 +902,7 @@ struct buffer_head *ext3_getblk(handle_t *handle, struct inode * inode, | |||
896 | } | 902 | } |
897 | return bh; | 903 | return bh; |
898 | } | 904 | } |
905 | err: | ||
899 | return NULL; | 906 | return NULL; |
900 | } | 907 | } |
901 | 908 | ||
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 50378d8ff84b..b3c690a3b54a 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -36,6 +36,8 @@ | |||
36 | #include <linux/quotaops.h> | 36 | #include <linux/quotaops.h> |
37 | #include <linux/buffer_head.h> | 37 | #include <linux/buffer_head.h> |
38 | #include <linux/smp_lock.h> | 38 | #include <linux/smp_lock.h> |
39 | |||
40 | #include "namei.h" | ||
39 | #include "xattr.h" | 41 | #include "xattr.h" |
40 | #include "acl.h" | 42 | #include "acl.h" |
41 | 43 | ||
diff --git a/fs/ext3/namei.h b/fs/ext3/namei.h new file mode 100644 index 000000000000..f2ce2b0065c9 --- /dev/null +++ b/fs/ext3/namei.h | |||
@@ -0,0 +1,8 @@ | |||
1 | /* linux/fs/ext3/namei.h | ||
2 | * | ||
3 | * Copyright (C) 2005 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | */ | ||
7 | |||
8 | extern struct dentry *ext3_get_parent(struct dentry *child); | ||
diff --git a/fs/ext3/resize.c b/fs/ext3/resize.c index 57f79106267d..1be78b4b4de9 100644 --- a/fs/ext3/resize.c +++ b/fs/ext3/resize.c | |||
@@ -118,6 +118,8 @@ static struct buffer_head *bclean(handle_t *handle, struct super_block *sb, | |||
118 | int err; | 118 | int err; |
119 | 119 | ||
120 | bh = sb_getblk(sb, blk); | 120 | bh = sb_getblk(sb, blk); |
121 | if (!bh) | ||
122 | return ERR_PTR(-EIO); | ||
121 | if ((err = ext3_journal_get_write_access(handle, bh))) { | 123 | if ((err = ext3_journal_get_write_access(handle, bh))) { |
122 | brelse(bh); | 124 | brelse(bh); |
123 | bh = ERR_PTR(err); | 125 | bh = ERR_PTR(err); |
@@ -202,6 +204,10 @@ static int setup_new_group_blocks(struct super_block *sb, | |||
202 | ext3_debug("update backup group %#04lx (+%d)\n", block, bit); | 204 | ext3_debug("update backup group %#04lx (+%d)\n", block, bit); |
203 | 205 | ||
204 | gdb = sb_getblk(sb, block); | 206 | gdb = sb_getblk(sb, block); |
207 | if (!gdb) { | ||
208 | err = -EIO; | ||
209 | goto exit_bh; | ||
210 | } | ||
205 | if ((err = ext3_journal_get_write_access(handle, gdb))) { | 211 | if ((err = ext3_journal_get_write_access(handle, gdb))) { |
206 | brelse(gdb); | 212 | brelse(gdb); |
207 | goto exit_bh; | 213 | goto exit_bh; |
@@ -643,6 +649,10 @@ static void update_backups(struct super_block *sb, | |||
643 | break; | 649 | break; |
644 | 650 | ||
645 | bh = sb_getblk(sb, group * bpg + blk_off); | 651 | bh = sb_getblk(sb, group * bpg + blk_off); |
652 | if (!bh) { | ||
653 | err = -EIO; | ||
654 | break; | ||
655 | } | ||
646 | ext3_debug("update metadata backup %#04lx\n", | 656 | ext3_debug("update metadata backup %#04lx\n", |
647 | (unsigned long)bh->b_blocknr); | 657 | (unsigned long)bh->b_blocknr); |
648 | if ((err = ext3_journal_get_write_access(handle, bh))) | 658 | if ((err = ext3_journal_get_write_access(handle, bh))) |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 097383c11154..f594989ccb7a 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -36,9 +36,12 @@ | |||
36 | #include <linux/namei.h> | 36 | #include <linux/namei.h> |
37 | #include <linux/quotaops.h> | 37 | #include <linux/quotaops.h> |
38 | #include <linux/seq_file.h> | 38 | #include <linux/seq_file.h> |
39 | |||
39 | #include <asm/uaccess.h> | 40 | #include <asm/uaccess.h> |
41 | |||
40 | #include "xattr.h" | 42 | #include "xattr.h" |
41 | #include "acl.h" | 43 | #include "acl.h" |
44 | #include "namei.h" | ||
42 | 45 | ||
43 | static int ext3_load_journal(struct super_block *, struct ext3_super_block *); | 46 | static int ext3_load_journal(struct super_block *, struct ext3_super_block *); |
44 | static int ext3_create_journal(struct super_block *, struct ext3_super_block *, | 47 | static int ext3_create_journal(struct super_block *, struct ext3_super_block *, |
@@ -615,7 +618,6 @@ static struct super_operations ext3_sops = { | |||
615 | #endif | 618 | #endif |
616 | }; | 619 | }; |
617 | 620 | ||
618 | struct dentry *ext3_get_parent(struct dentry *child); | ||
619 | static struct export_operations ext3_export_ops = { | 621 | static struct export_operations ext3_export_ops = { |
620 | .get_parent = ext3_get_parent, | 622 | .get_parent = ext3_get_parent, |
621 | }; | 623 | }; |
diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c index 269c7b92db9a..430de9f63be3 100644 --- a/fs/ext3/xattr.c +++ b/fs/ext3/xattr.c | |||
@@ -210,7 +210,7 @@ ext3_xattr_find_entry(struct ext3_xattr_entry **pentry, int name_index, | |||
210 | return cmp ? -ENODATA : 0; | 210 | return cmp ? -ENODATA : 0; |
211 | } | 211 | } |
212 | 212 | ||
213 | int | 213 | static int |
214 | ext3_xattr_block_get(struct inode *inode, int name_index, const char *name, | 214 | ext3_xattr_block_get(struct inode *inode, int name_index, const char *name, |
215 | void *buffer, size_t buffer_size) | 215 | void *buffer, size_t buffer_size) |
216 | { | 216 | { |
@@ -354,7 +354,7 @@ ext3_xattr_list_entries(struct inode *inode, struct ext3_xattr_entry *entry, | |||
354 | return buffer_size - rest; | 354 | return buffer_size - rest; |
355 | } | 355 | } |
356 | 356 | ||
357 | int | 357 | static int |
358 | ext3_xattr_block_list(struct inode *inode, char *buffer, size_t buffer_size) | 358 | ext3_xattr_block_list(struct inode *inode, char *buffer, size_t buffer_size) |
359 | { | 359 | { |
360 | struct buffer_head *bh = NULL; | 360 | struct buffer_head *bh = NULL; |
@@ -626,7 +626,7 @@ struct ext3_xattr_block_find { | |||
626 | struct buffer_head *bh; | 626 | struct buffer_head *bh; |
627 | }; | 627 | }; |
628 | 628 | ||
629 | int | 629 | static int |
630 | ext3_xattr_block_find(struct inode *inode, struct ext3_xattr_info *i, | 630 | ext3_xattr_block_find(struct inode *inode, struct ext3_xattr_info *i, |
631 | struct ext3_xattr_block_find *bs) | 631 | struct ext3_xattr_block_find *bs) |
632 | { | 632 | { |
@@ -859,7 +859,7 @@ struct ext3_xattr_ibody_find { | |||
859 | struct ext3_iloc iloc; | 859 | struct ext3_iloc iloc; |
860 | }; | 860 | }; |
861 | 861 | ||
862 | int | 862 | static int |
863 | ext3_xattr_ibody_find(struct inode *inode, struct ext3_xattr_info *i, | 863 | ext3_xattr_ibody_find(struct inode *inode, struct ext3_xattr_info *i, |
864 | struct ext3_xattr_ibody_find *is) | 864 | struct ext3_xattr_ibody_find *is) |
865 | { | 865 | { |