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 5df3d2d8169c..9f311d27b16f 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 d4dff278cbd8..b31dbd4c46ad 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 4ac304c55c53..ff9bcdc5b0d5 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 aa4356d09eee..1d3804492aa7 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 008bf062fd26..a748fe21465a 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 d679fc48ef27..36a29b753c79 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 c659f92298d3..6f155788cbc6 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 873e1bab9c4c..fafaad795cd6 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 544b2799a911..95fee278ab9d 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 8d86a8706c0e..dcbf98722afc 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 4b98fee8e161..8a9657d7f7c6 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 ebe10314e512..de038da6f6bd 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); |
