aboutsummaryrefslogtreecommitdiffstats
path: root/fs/hfsplus/extents.c
diff options
context:
space:
mode:
authorAlexey Khoroshilov <khoroshilov@ispras.ru>2011-07-05 18:30:00 -0400
committerChristoph Hellwig <hch@lst.de>2011-07-07 11:45:46 -0400
commitdd7f3d5458e5c0eded620fe8192abe7e418fc94c (patch)
tree80ccd8fe3d0e7dab7d18852ceac6b4093d3cd44a /fs/hfsplus/extents.c
parent5bd9d99d107c56ff7b35a29e930d85f91a07b2fd (diff)
hfsplus: Add error propagation for hfsplus_ext_write_extent_locked
Implement error propagation through the callers of hfsplus_ext_write_extent_locked(). Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'fs/hfsplus/extents.c')
-rw-r--r--fs/hfsplus/extents.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/fs/hfsplus/extents.c b/fs/hfsplus/extents.c
index 95065a89e7e2..5849e3ef35cc 100644
--- a/fs/hfsplus/extents.c
+++ b/fs/hfsplus/extents.c
@@ -119,23 +119,31 @@ static void __hfsplus_ext_write_extent(struct inode *inode,
119 set_bit(HFSPLUS_I_EXT_DIRTY, &hip->flags); 119 set_bit(HFSPLUS_I_EXT_DIRTY, &hip->flags);
120} 120}
121 121
122static void hfsplus_ext_write_extent_locked(struct inode *inode) 122static int hfsplus_ext_write_extent_locked(struct inode *inode)
123{ 123{
124 int res;
125
124 if (HFSPLUS_I(inode)->extent_state & HFSPLUS_EXT_DIRTY) { 126 if (HFSPLUS_I(inode)->extent_state & HFSPLUS_EXT_DIRTY) {
125 struct hfs_find_data fd; 127 struct hfs_find_data fd;
126 128
127 if (!hfs_find_init(HFSPLUS_SB(inode->i_sb)->ext_tree, &fd)) { 129 res = hfs_find_init(HFSPLUS_SB(inode->i_sb)->ext_tree, &fd);
128 __hfsplus_ext_write_extent(inode, &fd); 130 if (res)
129 hfs_find_exit(&fd); 131 return res;
130 } 132 __hfsplus_ext_write_extent(inode, &fd);
133 hfs_find_exit(&fd);
131 } 134 }
135 return 0;
132} 136}
133 137
134void hfsplus_ext_write_extent(struct inode *inode) 138int hfsplus_ext_write_extent(struct inode *inode)
135{ 139{
140 int res;
141
136 mutex_lock(&HFSPLUS_I(inode)->extents_lock); 142 mutex_lock(&HFSPLUS_I(inode)->extents_lock);
137 hfsplus_ext_write_extent_locked(inode); 143 res = hfsplus_ext_write_extent_locked(inode);
138 mutex_unlock(&HFSPLUS_I(inode)->extents_lock); 144 mutex_unlock(&HFSPLUS_I(inode)->extents_lock);
145
146 return res;
139} 147}
140 148
141static inline int __hfsplus_ext_read_extent(struct hfs_find_data *fd, 149static inline int __hfsplus_ext_read_extent(struct hfs_find_data *fd,
@@ -477,7 +485,9 @@ out:
477 485
478insert_extent: 486insert_extent:
479 dprint(DBG_EXTENT, "insert new extent\n"); 487 dprint(DBG_EXTENT, "insert new extent\n");
480 hfsplus_ext_write_extent_locked(inode); 488 res = hfsplus_ext_write_extent_locked(inode);
489 if (res)
490 goto out;
481 491
482 memset(hip->cached_extents, 0, sizeof(hfsplus_extent_rec)); 492 memset(hip->cached_extents, 0, sizeof(hfsplus_extent_rec));
483 hip->cached_extents[0].start_block = cpu_to_be32(start); 493 hip->cached_extents[0].start_block = cpu_to_be32(start);