diff options
author | Alexey Khoroshilov <khoroshilov@ispras.ru> | 2011-07-05 18:30:00 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2011-07-07 11:45:46 -0400 |
commit | dd7f3d5458e5c0eded620fe8192abe7e418fc94c (patch) | |
tree | 80ccd8fe3d0e7dab7d18852ceac6b4093d3cd44a /fs/hfsplus/extents.c | |
parent | 5bd9d99d107c56ff7b35a29e930d85f91a07b2fd (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.c | 26 |
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 | ||
122 | static void hfsplus_ext_write_extent_locked(struct inode *inode) | 122 | static 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 | ||
134 | void hfsplus_ext_write_extent(struct inode *inode) | 138 | int 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 | ||
141 | static inline int __hfsplus_ext_read_extent(struct hfs_find_data *fd, | 149 | static inline int __hfsplus_ext_read_extent(struct hfs_find_data *fd, |
@@ -477,7 +485,9 @@ out: | |||
477 | 485 | ||
478 | insert_extent: | 486 | insert_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); |