.. | .. |
---|
147 | 147 | goto out; |
---|
148 | 148 | |
---|
149 | 149 | down_write(&iinfo->i_data_sem); |
---|
150 | | - if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { |
---|
151 | | - loff_t end = iocb->ki_pos + iov_iter_count(from); |
---|
152 | | - |
---|
153 | | - if (inode->i_sb->s_blocksize < |
---|
154 | | - (udf_file_entry_alloc_offset(inode) + end)) { |
---|
155 | | - err = udf_expand_file_adinicb(inode); |
---|
156 | | - if (err) { |
---|
157 | | - inode_unlock(inode); |
---|
158 | | - udf_debug("udf_expand_adinicb: err=%d\n", err); |
---|
159 | | - return err; |
---|
160 | | - } |
---|
161 | | - } else { |
---|
162 | | - iinfo->i_lenAlloc = max(end, inode->i_size); |
---|
163 | | - up_write(&iinfo->i_data_sem); |
---|
| 150 | + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB && |
---|
| 151 | + inode->i_sb->s_blocksize < (udf_file_entry_alloc_offset(inode) + |
---|
| 152 | + iocb->ki_pos + iov_iter_count(from))) { |
---|
| 153 | + err = udf_expand_file_adinicb(inode); |
---|
| 154 | + if (err) { |
---|
| 155 | + inode_unlock(inode); |
---|
| 156 | + udf_debug("udf_expand_adinicb: err=%d\n", err); |
---|
| 157 | + return err; |
---|
164 | 158 | } |
---|
165 | 159 | } else |
---|
166 | 160 | up_write(&iinfo->i_data_sem); |
---|
167 | 161 | |
---|
168 | 162 | retval = __generic_file_write_iter(iocb, from); |
---|
169 | 163 | out: |
---|
| 164 | + down_write(&iinfo->i_data_sem); |
---|
| 165 | + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB && retval > 0) |
---|
| 166 | + iinfo->i_lenAlloc = inode->i_size; |
---|
| 167 | + up_write(&iinfo->i_data_sem); |
---|
170 | 168 | inode_unlock(inode); |
---|
171 | 169 | |
---|
172 | 170 | if (retval > 0) { |
---|