diff options
Diffstat (limited to 'fs/udf/inode.c')
-rw-r--r-- | fs/udf/inode.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 1d1358ed80c1..329e7a108ab7 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/writeback.h> | 37 | #include <linux/writeback.h> |
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/crc-itu-t.h> | 39 | #include <linux/crc-itu-t.h> |
40 | #include <linux/mpage.h> | ||
40 | 41 | ||
41 | #include "udf_i.h" | 42 | #include "udf_i.h" |
42 | #include "udf_sb.h" | 43 | #include "udf_sb.h" |
@@ -83,12 +84,10 @@ void udf_evict_inode(struct inode *inode) | |||
83 | end_writeback(inode); | 84 | end_writeback(inode); |
84 | if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && | 85 | if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && |
85 | inode->i_size != iinfo->i_lenExtents) { | 86 | inode->i_size != iinfo->i_lenExtents) { |
86 | printk(KERN_WARNING "UDF-fs (%s): Inode %lu (mode %o) has " | 87 | udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n", |
87 | "inode size %llu different from extent length %llu. " | 88 | inode->i_ino, inode->i_mode, |
88 | "Filesystem need not be standards compliant.\n", | 89 | (unsigned long long)inode->i_size, |
89 | inode->i_sb->s_id, inode->i_ino, inode->i_mode, | 90 | (unsigned long long)iinfo->i_lenExtents); |
90 | (unsigned long long)inode->i_size, | ||
91 | (unsigned long long)iinfo->i_lenExtents); | ||
92 | } | 91 | } |
93 | kfree(iinfo->i_ext.i_data); | 92 | kfree(iinfo->i_ext.i_data); |
94 | iinfo->i_ext.i_data = NULL; | 93 | iinfo->i_ext.i_data = NULL; |
@@ -104,7 +103,13 @@ static int udf_writepage(struct page *page, struct writeback_control *wbc) | |||
104 | 103 | ||
105 | static int udf_readpage(struct file *file, struct page *page) | 104 | static int udf_readpage(struct file *file, struct page *page) |
106 | { | 105 | { |
107 | return block_read_full_page(page, udf_get_block); | 106 | return mpage_readpage(page, udf_get_block); |
107 | } | ||
108 | |||
109 | static int udf_readpages(struct file *file, struct address_space *mapping, | ||
110 | struct list_head *pages, unsigned nr_pages) | ||
111 | { | ||
112 | return mpage_readpages(mapping, pages, nr_pages, udf_get_block); | ||
108 | } | 113 | } |
109 | 114 | ||
110 | static int udf_write_begin(struct file *file, struct address_space *mapping, | 115 | static int udf_write_begin(struct file *file, struct address_space *mapping, |
@@ -139,6 +144,7 @@ static sector_t udf_bmap(struct address_space *mapping, sector_t block) | |||
139 | 144 | ||
140 | const struct address_space_operations udf_aops = { | 145 | const struct address_space_operations udf_aops = { |
141 | .readpage = udf_readpage, | 146 | .readpage = udf_readpage, |
147 | .readpages = udf_readpages, | ||
142 | .writepage = udf_writepage, | 148 | .writepage = udf_writepage, |
143 | .write_begin = udf_write_begin, | 149 | .write_begin = udf_write_begin, |
144 | .write_end = generic_write_end, | 150 | .write_end = generic_write_end, |
@@ -1169,16 +1175,15 @@ static void __udf_read_inode(struct inode *inode) | |||
1169 | */ | 1175 | */ |
1170 | bh = udf_read_ptagged(inode->i_sb, &iinfo->i_location, 0, &ident); | 1176 | bh = udf_read_ptagged(inode->i_sb, &iinfo->i_location, 0, &ident); |
1171 | if (!bh) { | 1177 | if (!bh) { |
1172 | printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed !bh\n", | 1178 | udf_err(inode->i_sb, "(ino %ld) failed !bh\n", inode->i_ino); |
1173 | inode->i_ino); | ||
1174 | make_bad_inode(inode); | 1179 | make_bad_inode(inode); |
1175 | return; | 1180 | return; |
1176 | } | 1181 | } |
1177 | 1182 | ||
1178 | if (ident != TAG_IDENT_FE && ident != TAG_IDENT_EFE && | 1183 | if (ident != TAG_IDENT_FE && ident != TAG_IDENT_EFE && |
1179 | ident != TAG_IDENT_USE) { | 1184 | ident != TAG_IDENT_USE) { |
1180 | printk(KERN_ERR "udf: udf_read_inode(ino %ld) " | 1185 | udf_err(inode->i_sb, "(ino %ld) failed ident=%d\n", |
1181 | "failed ident=%d\n", inode->i_ino, ident); | 1186 | inode->i_ino, ident); |
1182 | brelse(bh); | 1187 | brelse(bh); |
1183 | make_bad_inode(inode); | 1188 | make_bad_inode(inode); |
1184 | return; | 1189 | return; |
@@ -1218,8 +1223,8 @@ static void __udf_read_inode(struct inode *inode) | |||
1218 | } | 1223 | } |
1219 | brelse(ibh); | 1224 | brelse(ibh); |
1220 | } else if (fe->icbTag.strategyType != cpu_to_le16(4)) { | 1225 | } else if (fe->icbTag.strategyType != cpu_to_le16(4)) { |
1221 | printk(KERN_ERR "udf: unsupported strategy type: %d\n", | 1226 | udf_err(inode->i_sb, "unsupported strategy type: %d\n", |
1222 | le16_to_cpu(fe->icbTag.strategyType)); | 1227 | le16_to_cpu(fe->icbTag.strategyType)); |
1223 | brelse(bh); | 1228 | brelse(bh); |
1224 | make_bad_inode(inode); | 1229 | make_bad_inode(inode); |
1225 | return; | 1230 | return; |
@@ -1413,9 +1418,8 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) | |||
1413 | udf_debug("METADATA BITMAP FILE-----\n"); | 1418 | udf_debug("METADATA BITMAP FILE-----\n"); |
1414 | break; | 1419 | break; |
1415 | default: | 1420 | default: |
1416 | printk(KERN_ERR "udf: udf_fill_inode(ino %ld) failed unknown " | 1421 | udf_err(inode->i_sb, "(ino %ld) failed unknown file type=%d\n", |
1417 | "file type=%d\n", inode->i_ino, | 1422 | inode->i_ino, fe->icbTag.fileType); |
1418 | fe->icbTag.fileType); | ||
1419 | make_bad_inode(inode); | 1423 | make_bad_inode(inode); |
1420 | return; | 1424 | return; |
1421 | } | 1425 | } |
@@ -1438,8 +1442,8 @@ static int udf_alloc_i_data(struct inode *inode, size_t size) | |||
1438 | iinfo->i_ext.i_data = kmalloc(size, GFP_KERNEL); | 1442 | iinfo->i_ext.i_data = kmalloc(size, GFP_KERNEL); |
1439 | 1443 | ||
1440 | if (!iinfo->i_ext.i_data) { | 1444 | if (!iinfo->i_ext.i_data) { |
1441 | printk(KERN_ERR "udf:udf_alloc_i_data (ino %ld) " | 1445 | udf_err(inode->i_sb, "(ino %ld) no free memory\n", |
1442 | "no free memory\n", inode->i_ino); | 1446 | inode->i_ino); |
1443 | return -ENOMEM; | 1447 | return -ENOMEM; |
1444 | } | 1448 | } |
1445 | 1449 | ||
@@ -1689,9 +1693,8 @@ out: | |||
1689 | if (do_sync) { | 1693 | if (do_sync) { |
1690 | sync_dirty_buffer(bh); | 1694 | sync_dirty_buffer(bh); |
1691 | if (buffer_write_io_error(bh)) { | 1695 | if (buffer_write_io_error(bh)) { |
1692 | printk(KERN_WARNING "IO error syncing udf inode " | 1696 | udf_warn(inode->i_sb, "IO error syncing udf inode [%08lx]\n", |
1693 | "[%s:%08lx]\n", inode->i_sb->s_id, | 1697 | inode->i_ino); |
1694 | inode->i_ino); | ||
1695 | err = -EIO; | 1698 | err = -EIO; |
1696 | } | 1699 | } |
1697 | } | 1700 | } |
@@ -1982,8 +1985,7 @@ int8_t udf_current_aext(struct inode *inode, struct extent_position *epos, | |||
1982 | *elen = le32_to_cpu(lad->extLength) & UDF_EXTENT_LENGTH_MASK; | 1985 | *elen = le32_to_cpu(lad->extLength) & UDF_EXTENT_LENGTH_MASK; |
1983 | break; | 1986 | break; |
1984 | default: | 1987 | default: |
1985 | udf_debug("alloc_type = %d unsupported\n", | 1988 | udf_debug("alloc_type = %d unsupported\n", iinfo->i_alloc_type); |
1986 | iinfo->i_alloc_type); | ||
1987 | return -1; | 1989 | return -1; |
1988 | } | 1990 | } |
1989 | 1991 | ||