diff options
-rw-r--r-- | fs/ext2/super.c | 6 | ||||
-rw-r--r-- | fs/ext3/fsync.c | 9 | ||||
-rw-r--r-- | fs/ext3/super.c | 3 | ||||
-rw-r--r-- | fs/isofs/export.c | 1 | ||||
-rw-r--r-- | fs/jbd/recovery.c | 7 | ||||
-rw-r--r-- | fs/quota/dquot.c | 2 | ||||
-rw-r--r-- | fs/quota/quota.c | 2 | ||||
-rw-r--r-- | fs/udf/inode.c | 4 | ||||
-rw-r--r-- | fs/udf/namei.c | 1 | ||||
-rw-r--r-- | fs/udf/super.c | 130 | ||||
-rw-r--r-- | fs/udf/truncate.c | 4 | ||||
-rw-r--r-- | fs/udf/udfdecl.h | 1 |
12 files changed, 88 insertions, 82 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 5df3d2d8169..9f311d27b16 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
@@ -771,13 +771,13 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) | |||
771 | err = -ENOMEM; | 771 | err = -ENOMEM; |
772 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); | 772 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); |
773 | if (!sbi) | 773 | if (!sbi) |
774 | goto failed_unlock; | 774 | goto failed; |
775 | 775 | ||
776 | sbi->s_blockgroup_lock = | 776 | sbi->s_blockgroup_lock = |
777 | kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); | 777 | kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); |
778 | if (!sbi->s_blockgroup_lock) { | 778 | if (!sbi->s_blockgroup_lock) { |
779 | kfree(sbi); | 779 | kfree(sbi); |
780 | goto failed_unlock; | 780 | goto failed; |
781 | } | 781 | } |
782 | sb->s_fs_info = sbi; | 782 | sb->s_fs_info = sbi; |
783 | sbi->s_sb_block = sb_block; | 783 | sbi->s_sb_block = sb_block; |
@@ -1130,7 +1130,7 @@ failed_sbi: | |||
1130 | sb->s_fs_info = NULL; | 1130 | sb->s_fs_info = NULL; |
1131 | kfree(sbi->s_blockgroup_lock); | 1131 | kfree(sbi->s_blockgroup_lock); |
1132 | kfree(sbi); | 1132 | kfree(sbi); |
1133 | failed_unlock: | 1133 | failed: |
1134 | return ret; | 1134 | return ret; |
1135 | } | 1135 | } |
1136 | 1136 | ||
diff --git a/fs/ext3/fsync.c b/fs/ext3/fsync.c index d4dff278cbd..b31dbd4c46a 100644 --- a/fs/ext3/fsync.c +++ b/fs/ext3/fsync.c | |||
@@ -92,8 +92,13 @@ int ext3_sync_file(struct file *file, loff_t start, loff_t end, int datasync) | |||
92 | * disk caches manually so that data really is on persistent | 92 | * disk caches manually so that data really is on persistent |
93 | * storage | 93 | * storage |
94 | */ | 94 | */ |
95 | if (needs_barrier) | 95 | if (needs_barrier) { |
96 | blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); | 96 | int err; |
97 | |||
98 | err = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); | ||
99 | if (!ret) | ||
100 | ret = err; | ||
101 | } | ||
97 | out: | 102 | out: |
98 | trace_ext3_sync_file_exit(inode, ret); | 103 | trace_ext3_sync_file_exit(inode, ret); |
99 | return ret; | 104 | return ret; |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 4ac304c55c5..ff9bcdc5b0d 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -2058,7 +2058,8 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent) | |||
2058 | goto failed_mount3; | 2058 | goto failed_mount3; |
2059 | } | 2059 | } |
2060 | 2060 | ||
2061 | ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY); | 2061 | if (ext3_setup_super(sb, es, sb->s_flags & MS_RDONLY)) |
2062 | sb->s_flags |= MS_RDONLY; | ||
2062 | 2063 | ||
2063 | EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS; | 2064 | EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS; |
2064 | ext3_orphan_cleanup(sb, es); | 2065 | ext3_orphan_cleanup(sb, es); |
diff --git a/fs/isofs/export.c b/fs/isofs/export.c index aa4356d09ee..1d3804492aa 100644 --- a/fs/isofs/export.c +++ b/fs/isofs/export.c | |||
@@ -134,6 +134,7 @@ isofs_export_encode_fh(struct inode *inode, | |||
134 | len = 3; | 134 | len = 3; |
135 | fh32[0] = ei->i_iget5_block; | 135 | fh32[0] = ei->i_iget5_block; |
136 | fh16[2] = (__u16)ei->i_iget5_offset; /* fh16 [sic] */ | 136 | fh16[2] = (__u16)ei->i_iget5_offset; /* fh16 [sic] */ |
137 | fh16[3] = 0; /* avoid leaking uninitialized data */ | ||
137 | fh32[2] = inode->i_generation; | 138 | fh32[2] = inode->i_generation; |
138 | if (parent) { | 139 | if (parent) { |
139 | struct iso_inode_info *eparent; | 140 | struct iso_inode_info *eparent; |
diff --git a/fs/jbd/recovery.c b/fs/jbd/recovery.c index 008bf062fd2..a748fe21465 100644 --- a/fs/jbd/recovery.c +++ b/fs/jbd/recovery.c | |||
@@ -265,8 +265,11 @@ int journal_recover(journal_t *journal) | |||
265 | if (!err) | 265 | if (!err) |
266 | err = err2; | 266 | err = err2; |
267 | /* Flush disk caches to get replayed data on the permanent storage */ | 267 | /* Flush disk caches to get replayed data on the permanent storage */ |
268 | if (journal->j_flags & JFS_BARRIER) | 268 | if (journal->j_flags & JFS_BARRIER) { |
269 | blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL); | 269 | err2 = blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL); |
270 | if (!err) | ||
271 | err = err2; | ||
272 | } | ||
270 | 273 | ||
271 | return err; | 274 | return err; |
272 | } | 275 | } |
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index d679fc48ef2..36a29b753c7 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c | |||
@@ -78,7 +78,7 @@ | |||
78 | #include <linux/quotaops.h> | 78 | #include <linux/quotaops.h> |
79 | #include "../internal.h" /* ugh */ | 79 | #include "../internal.h" /* ugh */ |
80 | 80 | ||
81 | #include <asm/uaccess.h> | 81 | #include <linux/uaccess.h> |
82 | 82 | ||
83 | /* | 83 | /* |
84 | * There are three quota SMP locks. dq_list_lock protects all lists with quotas | 84 | * There are three quota SMP locks. dq_list_lock protects all lists with quotas |
diff --git a/fs/quota/quota.c b/fs/quota/quota.c index c659f92298d..6f155788cbc 100644 --- a/fs/quota/quota.c +++ b/fs/quota/quota.c | |||
@@ -9,7 +9,7 @@ | |||
9 | #include <linux/namei.h> | 9 | #include <linux/namei.h> |
10 | #include <linux/slab.h> | 10 | #include <linux/slab.h> |
11 | #include <asm/current.h> | 11 | #include <asm/current.h> |
12 | #include <asm/uaccess.h> | 12 | #include <linux/uaccess.h> |
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/security.h> | 14 | #include <linux/security.h> |
15 | #include <linux/syscalls.h> | 15 | #include <linux/syscalls.h> |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 873e1bab9c4..fafaad795cd 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -1247,7 +1247,6 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1247 | { | 1247 | { |
1248 | struct fileEntry *fe; | 1248 | struct fileEntry *fe; |
1249 | struct extendedFileEntry *efe; | 1249 | struct extendedFileEntry *efe; |
1250 | int offset; | ||
1251 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); | 1250 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); |
1252 | struct udf_inode_info *iinfo = UDF_I(inode); | 1251 | struct udf_inode_info *iinfo = UDF_I(inode); |
1253 | unsigned int link_count; | 1252 | unsigned int link_count; |
@@ -1359,7 +1358,6 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1359 | iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); | 1358 | iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); |
1360 | iinfo->i_lenAlloc = le32_to_cpu(fe->lengthAllocDescs); | 1359 | iinfo->i_lenAlloc = le32_to_cpu(fe->lengthAllocDescs); |
1361 | iinfo->i_checkpoint = le32_to_cpu(fe->checkpoint); | 1360 | iinfo->i_checkpoint = le32_to_cpu(fe->checkpoint); |
1362 | offset = sizeof(struct fileEntry) + iinfo->i_lenEAttr; | ||
1363 | } else { | 1361 | } else { |
1364 | inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << | 1362 | inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << |
1365 | (inode->i_sb->s_blocksize_bits - 9); | 1363 | (inode->i_sb->s_blocksize_bits - 9); |
@@ -1381,8 +1379,6 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1381 | iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); | 1379 | iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); |
1382 | iinfo->i_lenAlloc = le32_to_cpu(efe->lengthAllocDescs); | 1380 | iinfo->i_lenAlloc = le32_to_cpu(efe->lengthAllocDescs); |
1383 | iinfo->i_checkpoint = le32_to_cpu(efe->checkpoint); | 1381 | iinfo->i_checkpoint = le32_to_cpu(efe->checkpoint); |
1384 | offset = sizeof(struct extendedFileEntry) + | ||
1385 | iinfo->i_lenEAttr; | ||
1386 | } | 1382 | } |
1387 | 1383 | ||
1388 | switch (fe->icbTag.fileType) { | 1384 | switch (fe->icbTag.fileType) { |
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 544b2799a91..95fee278ab9 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -1279,6 +1279,7 @@ static int udf_encode_fh(struct inode *inode, __u32 *fh, int *lenp, | |||
1279 | *lenp = 3; | 1279 | *lenp = 3; |
1280 | fid->udf.block = location.logicalBlockNum; | 1280 | fid->udf.block = location.logicalBlockNum; |
1281 | fid->udf.partref = location.partitionReferenceNum; | 1281 | fid->udf.partref = location.partitionReferenceNum; |
1282 | fid->udf.parent_partref = 0; | ||
1282 | fid->udf.generation = inode->i_generation; | 1283 | fid->udf.generation = inode->i_generation; |
1283 | 1284 | ||
1284 | if (parent) { | 1285 | if (parent) { |
diff --git a/fs/udf/super.c b/fs/udf/super.c index 8d86a8706c0..dcbf98722af 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c | |||
@@ -252,6 +252,63 @@ static int udf_sb_alloc_partition_maps(struct super_block *sb, u32 count) | |||
252 | return 0; | 252 | return 0; |
253 | } | 253 | } |
254 | 254 | ||
255 | static void udf_sb_free_bitmap(struct udf_bitmap *bitmap) | ||
256 | { | ||
257 | int i; | ||
258 | int nr_groups = bitmap->s_nr_groups; | ||
259 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * | ||
260 | nr_groups); | ||
261 | |||
262 | for (i = 0; i < nr_groups; i++) | ||
263 | if (bitmap->s_block_bitmap[i]) | ||
264 | brelse(bitmap->s_block_bitmap[i]); | ||
265 | |||
266 | if (size <= PAGE_SIZE) | ||
267 | kfree(bitmap); | ||
268 | else | ||
269 | vfree(bitmap); | ||
270 | } | ||
271 | |||
272 | static void udf_free_partition(struct udf_part_map *map) | ||
273 | { | ||
274 | int i; | ||
275 | struct udf_meta_data *mdata; | ||
276 | |||
277 | if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) | ||
278 | iput(map->s_uspace.s_table); | ||
279 | if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) | ||
280 | iput(map->s_fspace.s_table); | ||
281 | if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) | ||
282 | udf_sb_free_bitmap(map->s_uspace.s_bitmap); | ||
283 | if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) | ||
284 | udf_sb_free_bitmap(map->s_fspace.s_bitmap); | ||
285 | if (map->s_partition_type == UDF_SPARABLE_MAP15) | ||
286 | for (i = 0; i < 4; i++) | ||
287 | brelse(map->s_type_specific.s_sparing.s_spar_map[i]); | ||
288 | else if (map->s_partition_type == UDF_METADATA_MAP25) { | ||
289 | mdata = &map->s_type_specific.s_metadata; | ||
290 | iput(mdata->s_metadata_fe); | ||
291 | mdata->s_metadata_fe = NULL; | ||
292 | |||
293 | iput(mdata->s_mirror_fe); | ||
294 | mdata->s_mirror_fe = NULL; | ||
295 | |||
296 | iput(mdata->s_bitmap_fe); | ||
297 | mdata->s_bitmap_fe = NULL; | ||
298 | } | ||
299 | } | ||
300 | |||
301 | static void udf_sb_free_partitions(struct super_block *sb) | ||
302 | { | ||
303 | struct udf_sb_info *sbi = UDF_SB(sb); | ||
304 | int i; | ||
305 | |||
306 | for (i = 0; i < sbi->s_partitions; i++) | ||
307 | udf_free_partition(&sbi->s_partmaps[i]); | ||
308 | kfree(sbi->s_partmaps); | ||
309 | sbi->s_partmaps = NULL; | ||
310 | } | ||
311 | |||
255 | static int udf_show_options(struct seq_file *seq, struct dentry *root) | 312 | static int udf_show_options(struct seq_file *seq, struct dentry *root) |
256 | { | 313 | { |
257 | struct super_block *sb = root->d_sb; | 314 | struct super_block *sb = root->d_sb; |
@@ -1283,7 +1340,7 @@ static int udf_load_logicalvol(struct super_block *sb, sector_t block, | |||
1283 | BUG_ON(ident != TAG_IDENT_LVD); | 1340 | BUG_ON(ident != TAG_IDENT_LVD); |
1284 | lvd = (struct logicalVolDesc *)bh->b_data; | 1341 | lvd = (struct logicalVolDesc *)bh->b_data; |
1285 | table_len = le32_to_cpu(lvd->mapTableLength); | 1342 | table_len = le32_to_cpu(lvd->mapTableLength); |
1286 | if (sizeof(*lvd) + table_len > sb->s_blocksize) { | 1343 | if (table_len > sb->s_blocksize - sizeof(*lvd)) { |
1287 | udf_err(sb, "error loading logical volume descriptor: " | 1344 | udf_err(sb, "error loading logical volume descriptor: " |
1288 | "Partition table too long (%u > %lu)\n", table_len, | 1345 | "Partition table too long (%u > %lu)\n", table_len, |
1289 | sb->s_blocksize - sizeof(*lvd)); | 1346 | sb->s_blocksize - sizeof(*lvd)); |
@@ -1596,7 +1653,11 @@ static int udf_load_sequence(struct super_block *sb, struct buffer_head *bh, | |||
1596 | /* responsible for finding the PartitionDesc(s) */ | 1653 | /* responsible for finding the PartitionDesc(s) */ |
1597 | if (!udf_process_sequence(sb, main_s, main_e, fileset)) | 1654 | if (!udf_process_sequence(sb, main_s, main_e, fileset)) |
1598 | return 1; | 1655 | return 1; |
1599 | return !udf_process_sequence(sb, reserve_s, reserve_e, fileset); | 1656 | udf_sb_free_partitions(sb); |
1657 | if (!udf_process_sequence(sb, reserve_s, reserve_e, fileset)) | ||
1658 | return 1; | ||
1659 | udf_sb_free_partitions(sb); | ||
1660 | return 0; | ||
1600 | } | 1661 | } |
1601 | 1662 | ||
1602 | /* | 1663 | /* |
@@ -1861,55 +1922,8 @@ u64 lvid_get_unique_id(struct super_block *sb) | |||
1861 | return ret; | 1922 | return ret; |
1862 | } | 1923 | } |
1863 | 1924 | ||
1864 | static void udf_sb_free_bitmap(struct udf_bitmap *bitmap) | ||
1865 | { | ||
1866 | int i; | ||
1867 | int nr_groups = bitmap->s_nr_groups; | ||
1868 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * | ||
1869 | nr_groups); | ||
1870 | |||
1871 | for (i = 0; i < nr_groups; i++) | ||
1872 | if (bitmap->s_block_bitmap[i]) | ||
1873 | brelse(bitmap->s_block_bitmap[i]); | ||
1874 | |||
1875 | if (size <= PAGE_SIZE) | ||
1876 | kfree(bitmap); | ||
1877 | else | ||
1878 | vfree(bitmap); | ||
1879 | } | ||
1880 | |||
1881 | static void udf_free_partition(struct udf_part_map *map) | ||
1882 | { | ||
1883 | int i; | ||
1884 | struct udf_meta_data *mdata; | ||
1885 | |||
1886 | if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_TABLE) | ||
1887 | iput(map->s_uspace.s_table); | ||
1888 | if (map->s_partition_flags & UDF_PART_FLAG_FREED_TABLE) | ||
1889 | iput(map->s_fspace.s_table); | ||
1890 | if (map->s_partition_flags & UDF_PART_FLAG_UNALLOC_BITMAP) | ||
1891 | udf_sb_free_bitmap(map->s_uspace.s_bitmap); | ||
1892 | if (map->s_partition_flags & UDF_PART_FLAG_FREED_BITMAP) | ||
1893 | udf_sb_free_bitmap(map->s_fspace.s_bitmap); | ||
1894 | if (map->s_partition_type == UDF_SPARABLE_MAP15) | ||
1895 | for (i = 0; i < 4; i++) | ||
1896 | brelse(map->s_type_specific.s_sparing.s_spar_map[i]); | ||
1897 | else if (map->s_partition_type == UDF_METADATA_MAP25) { | ||
1898 | mdata = &map->s_type_specific.s_metadata; | ||
1899 | iput(mdata->s_metadata_fe); | ||
1900 | mdata->s_metadata_fe = NULL; | ||
1901 | |||
1902 | iput(mdata->s_mirror_fe); | ||
1903 | mdata->s_mirror_fe = NULL; | ||
1904 | |||
1905 | iput(mdata->s_bitmap_fe); | ||
1906 | mdata->s_bitmap_fe = NULL; | ||
1907 | } | ||
1908 | } | ||
1909 | |||
1910 | static int udf_fill_super(struct super_block *sb, void *options, int silent) | 1925 | static int udf_fill_super(struct super_block *sb, void *options, int silent) |
1911 | { | 1926 | { |
1912 | int i; | ||
1913 | int ret; | 1927 | int ret; |
1914 | struct inode *inode = NULL; | 1928 | struct inode *inode = NULL; |
1915 | struct udf_options uopt; | 1929 | struct udf_options uopt; |
@@ -1974,7 +1988,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) | |||
1974 | sb->s_op = &udf_sb_ops; | 1988 | sb->s_op = &udf_sb_ops; |
1975 | sb->s_export_op = &udf_export_ops; | 1989 | sb->s_export_op = &udf_export_ops; |
1976 | 1990 | ||
1977 | sb->s_dirt = 0; | ||
1978 | sb->s_magic = UDF_SUPER_MAGIC; | 1991 | sb->s_magic = UDF_SUPER_MAGIC; |
1979 | sb->s_time_gran = 1000; | 1992 | sb->s_time_gran = 1000; |
1980 | 1993 | ||
@@ -2072,9 +2085,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) | |||
2072 | error_out: | 2085 | error_out: |
2073 | if (sbi->s_vat_inode) | 2086 | if (sbi->s_vat_inode) |
2074 | iput(sbi->s_vat_inode); | 2087 | iput(sbi->s_vat_inode); |
2075 | if (sbi->s_partitions) | ||
2076 | for (i = 0; i < sbi->s_partitions; i++) | ||
2077 | udf_free_partition(&sbi->s_partmaps[i]); | ||
2078 | #ifdef CONFIG_UDF_NLS | 2088 | #ifdef CONFIG_UDF_NLS |
2079 | if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) | 2089 | if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) |
2080 | unload_nls(sbi->s_nls_map); | 2090 | unload_nls(sbi->s_nls_map); |
@@ -2082,8 +2092,7 @@ error_out: | |||
2082 | if (!(sb->s_flags & MS_RDONLY)) | 2092 | if (!(sb->s_flags & MS_RDONLY)) |
2083 | udf_close_lvid(sb); | 2093 | udf_close_lvid(sb); |
2084 | brelse(sbi->s_lvid_bh); | 2094 | brelse(sbi->s_lvid_bh); |
2085 | 2095 | udf_sb_free_partitions(sb); | |
2086 | kfree(sbi->s_partmaps); | ||
2087 | kfree(sbi); | 2096 | kfree(sbi); |
2088 | sb->s_fs_info = NULL; | 2097 | sb->s_fs_info = NULL; |
2089 | 2098 | ||
@@ -2096,10 +2105,6 @@ void _udf_err(struct super_block *sb, const char *function, | |||
2096 | struct va_format vaf; | 2105 | struct va_format vaf; |
2097 | va_list args; | 2106 | va_list args; |
2098 | 2107 | ||
2099 | /* mark sb error */ | ||
2100 | if (!(sb->s_flags & MS_RDONLY)) | ||
2101 | sb->s_dirt = 1; | ||
2102 | |||
2103 | va_start(args, fmt); | 2108 | va_start(args, fmt); |
2104 | 2109 | ||
2105 | vaf.fmt = fmt; | 2110 | vaf.fmt = fmt; |
@@ -2128,16 +2133,12 @@ void _udf_warn(struct super_block *sb, const char *function, | |||
2128 | 2133 | ||
2129 | static void udf_put_super(struct super_block *sb) | 2134 | static void udf_put_super(struct super_block *sb) |
2130 | { | 2135 | { |
2131 | int i; | ||
2132 | struct udf_sb_info *sbi; | 2136 | struct udf_sb_info *sbi; |
2133 | 2137 | ||
2134 | sbi = UDF_SB(sb); | 2138 | sbi = UDF_SB(sb); |
2135 | 2139 | ||
2136 | if (sbi->s_vat_inode) | 2140 | if (sbi->s_vat_inode) |
2137 | iput(sbi->s_vat_inode); | 2141 | iput(sbi->s_vat_inode); |
2138 | if (sbi->s_partitions) | ||
2139 | for (i = 0; i < sbi->s_partitions; i++) | ||
2140 | udf_free_partition(&sbi->s_partmaps[i]); | ||
2141 | #ifdef CONFIG_UDF_NLS | 2142 | #ifdef CONFIG_UDF_NLS |
2142 | if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) | 2143 | if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) |
2143 | unload_nls(sbi->s_nls_map); | 2144 | unload_nls(sbi->s_nls_map); |
@@ -2145,7 +2146,7 @@ static void udf_put_super(struct super_block *sb) | |||
2145 | if (!(sb->s_flags & MS_RDONLY)) | 2146 | if (!(sb->s_flags & MS_RDONLY)) |
2146 | udf_close_lvid(sb); | 2147 | udf_close_lvid(sb); |
2147 | brelse(sbi->s_lvid_bh); | 2148 | brelse(sbi->s_lvid_bh); |
2148 | kfree(sbi->s_partmaps); | 2149 | udf_sb_free_partitions(sb); |
2149 | kfree(sb->s_fs_info); | 2150 | kfree(sb->s_fs_info); |
2150 | sb->s_fs_info = NULL; | 2151 | sb->s_fs_info = NULL; |
2151 | } | 2152 | } |
@@ -2161,7 +2162,6 @@ static int udf_sync_fs(struct super_block *sb, int wait) | |||
2161 | * the buffer for IO | 2162 | * the buffer for IO |
2162 | */ | 2163 | */ |
2163 | mark_buffer_dirty(sbi->s_lvid_bh); | 2164 | mark_buffer_dirty(sbi->s_lvid_bh); |
2164 | sb->s_dirt = 0; | ||
2165 | sbi->s_lvid_dirty = 0; | 2165 | sbi->s_lvid_dirty = 0; |
2166 | } | 2166 | } |
2167 | mutex_unlock(&sbi->s_alloc_mutex); | 2167 | mutex_unlock(&sbi->s_alloc_mutex); |
diff --git a/fs/udf/truncate.c b/fs/udf/truncate.c index 4b98fee8e16..8a9657d7f7c 100644 --- a/fs/udf/truncate.c +++ b/fs/udf/truncate.c | |||
@@ -248,7 +248,7 @@ void udf_truncate_extents(struct inode *inode) | |||
248 | /* We managed to free all extents in the | 248 | /* We managed to free all extents in the |
249 | * indirect extent - free it too */ | 249 | * indirect extent - free it too */ |
250 | BUG_ON(!epos.bh); | 250 | BUG_ON(!epos.bh); |
251 | udf_free_blocks(sb, inode, &epos.block, | 251 | udf_free_blocks(sb, NULL, &epos.block, |
252 | 0, indirect_ext_len); | 252 | 0, indirect_ext_len); |
253 | } else if (!epos.bh) { | 253 | } else if (!epos.bh) { |
254 | iinfo->i_lenAlloc = lenalloc; | 254 | iinfo->i_lenAlloc = lenalloc; |
@@ -275,7 +275,7 @@ void udf_truncate_extents(struct inode *inode) | |||
275 | 275 | ||
276 | if (indirect_ext_len) { | 276 | if (indirect_ext_len) { |
277 | BUG_ON(!epos.bh); | 277 | BUG_ON(!epos.bh); |
278 | udf_free_blocks(sb, inode, &epos.block, 0, indirect_ext_len); | 278 | udf_free_blocks(sb, NULL, &epos.block, 0, indirect_ext_len); |
279 | } else if (!epos.bh) { | 279 | } else if (!epos.bh) { |
280 | iinfo->i_lenAlloc = lenalloc; | 280 | iinfo->i_lenAlloc = lenalloc; |
281 | mark_inode_dirty(inode); | 281 | mark_inode_dirty(inode); |
diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index ebe10314e51..de038da6f6b 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h | |||
@@ -129,7 +129,6 @@ static inline void udf_updated_lvid(struct super_block *sb) | |||
129 | WARN_ON_ONCE(((struct logicalVolIntegrityDesc *) | 129 | WARN_ON_ONCE(((struct logicalVolIntegrityDesc *) |
130 | bh->b_data)->integrityType != | 130 | bh->b_data)->integrityType != |
131 | cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN)); | 131 | cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN)); |
132 | sb->s_dirt = 1; | ||
133 | UDF_SB(sb)->s_lvid_dirty = 1; | 132 | UDF_SB(sb)->s_lvid_dirty = 1; |
134 | } | 133 | } |
135 | extern u64 lvid_get_unique_id(struct super_block *sb); | 134 | extern u64 lvid_get_unique_id(struct super_block *sb); |