extents.c (0790b31b69374ddadefebb156251b319e5b43345) | extents.c (847c6c422aa0ae81a5517a9558ec2737806dca48) |
---|---|
1/* 2 * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com 3 * Written by Alex Tomas <alex@clusterfs.com> 4 * 5 * Architecture independence: 6 * Copyright (c) 2005, Bull S.A. 7 * Written by Pierre Peiffer <pierre.peiffer@bull.net> 8 * --- 5215 unchanged lines hidden (view full) --- 5224 5225 err = ext4_access_path(handle, inode, path + depth); 5226 if (err) 5227 goto out; 5228 5229 if (ex_start == EXT_FIRST_EXTENT(path[depth].p_hdr)) 5230 update = 1; 5231 | 1/* 2 * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com 3 * Written by Alex Tomas <alex@clusterfs.com> 4 * 5 * Architecture independence: 6 * Copyright (c) 2005, Bull S.A. 7 * Written by Pierre Peiffer <pierre.peiffer@bull.net> 8 * --- 5215 unchanged lines hidden (view full) --- 5224 5225 err = ext4_access_path(handle, inode, path + depth); 5226 if (err) 5227 goto out; 5228 5229 if (ex_start == EXT_FIRST_EXTENT(path[depth].p_hdr)) 5230 update = 1; 5231 |
5232 *start = ex_last->ee_block + | 5232 *start = le32_to_cpu(ex_last->ee_block) + |
5233 ext4_ext_get_actual_len(ex_last); 5234 5235 while (ex_start <= ex_last) { | 5233 ext4_ext_get_actual_len(ex_last); 5234 5235 while (ex_start <= ex_last) { |
5236 ex_start->ee_block -= shift; | 5236 le32_add_cpu(&ex_start->ee_block, -shift); |
5237 if (ex_start > 5238 EXT_FIRST_EXTENT(path[depth].p_hdr)) { 5239 if (ext4_ext_try_to_merge_right(inode, 5240 path, ex_start - 1)) 5241 ex_last--; 5242 } 5243 ex_start++; 5244 } --- 5 unchanged lines hidden (view full) --- 5250 break; 5251 } 5252 5253 /* Update index too */ 5254 err = ext4_access_path(handle, inode, path + depth); 5255 if (err) 5256 goto out; 5257 | 5237 if (ex_start > 5238 EXT_FIRST_EXTENT(path[depth].p_hdr)) { 5239 if (ext4_ext_try_to_merge_right(inode, 5240 path, ex_start - 1)) 5241 ex_last--; 5242 } 5243 ex_start++; 5244 } --- 5 unchanged lines hidden (view full) --- 5250 break; 5251 } 5252 5253 /* Update index too */ 5254 err = ext4_access_path(handle, inode, path + depth); 5255 if (err) 5256 goto out; 5257 |
5258 path[depth].p_idx->ei_block -= shift; | 5258 le32_add_cpu(&path[depth].p_idx->ei_block, -shift); |
5259 err = ext4_ext_dirty(handle, inode, path + depth); 5260 if (err) 5261 goto out; 5262 5263 /* we are done if current index is not a starting index */ 5264 if (path[depth].p_idx != EXT_FIRST_INDEX(path[depth].p_hdr)) 5265 break; 5266 --- 28 unchanged lines hidden (view full) --- 5295 depth = path->p_depth; 5296 extent = path[depth].p_ext; 5297 if (!extent) { 5298 ext4_ext_drop_refs(path); 5299 kfree(path); 5300 return ret; 5301 } 5302 | 5259 err = ext4_ext_dirty(handle, inode, path + depth); 5260 if (err) 5261 goto out; 5262 5263 /* we are done if current index is not a starting index */ 5264 if (path[depth].p_idx != EXT_FIRST_INDEX(path[depth].p_hdr)) 5265 break; 5266 --- 28 unchanged lines hidden (view full) --- 5295 depth = path->p_depth; 5296 extent = path[depth].p_ext; 5297 if (!extent) { 5298 ext4_ext_drop_refs(path); 5299 kfree(path); 5300 return ret; 5301 } 5302 |
5303 stop_block = extent->ee_block + ext4_ext_get_actual_len(extent); | 5303 stop_block = le32_to_cpu(extent->ee_block) + 5304 ext4_ext_get_actual_len(extent); |
5304 ext4_ext_drop_refs(path); 5305 kfree(path); 5306 5307 /* Nothing to shift, if hole is at the end of file */ 5308 if (start >= stop_block) 5309 return ret; 5310 5311 /* 5312 * Don't start shifting extents until we make sure the hole is big 5313 * enough to accomodate the shift. 5314 */ 5315 path = ext4_ext_find_extent(inode, start - 1, NULL, 0); 5316 depth = path->p_depth; 5317 extent = path[depth].p_ext; | 5305 ext4_ext_drop_refs(path); 5306 kfree(path); 5307 5308 /* Nothing to shift, if hole is at the end of file */ 5309 if (start >= stop_block) 5310 return ret; 5311 5312 /* 5313 * Don't start shifting extents until we make sure the hole is big 5314 * enough to accomodate the shift. 5315 */ 5316 path = ext4_ext_find_extent(inode, start - 1, NULL, 0); 5317 depth = path->p_depth; 5318 extent = path[depth].p_ext; |
5318 ex_start = extent->ee_block; 5319 ex_end = extent->ee_block + ext4_ext_get_actual_len(extent); | 5319 ex_start = le32_to_cpu(extent->ee_block); 5320 ex_end = le32_to_cpu(extent->ee_block) + 5321 ext4_ext_get_actual_len(extent); |
5320 ext4_ext_drop_refs(path); 5321 kfree(path); 5322 5323 if ((start == ex_start && shift > ex_start) || 5324 (shift > start - ex_end)) 5325 return -EINVAL; 5326 5327 /* Its safe to start updating extents */ 5328 while (start < stop_block) { 5329 path = ext4_ext_find_extent(inode, start, NULL, 0); 5330 if (IS_ERR(path)) 5331 return PTR_ERR(path); 5332 depth = path->p_depth; 5333 extent = path[depth].p_ext; | 5322 ext4_ext_drop_refs(path); 5323 kfree(path); 5324 5325 if ((start == ex_start && shift > ex_start) || 5326 (shift > start - ex_end)) 5327 return -EINVAL; 5328 5329 /* Its safe to start updating extents */ 5330 while (start < stop_block) { 5331 path = ext4_ext_find_extent(inode, start, NULL, 0); 5332 if (IS_ERR(path)) 5333 return PTR_ERR(path); 5334 depth = path->p_depth; 5335 extent = path[depth].p_ext; |
5334 current_block = extent->ee_block; | 5336 current_block = le32_to_cpu(extent->ee_block); |
5335 if (start > current_block) { 5336 /* Hole, move to the next extent */ 5337 ret = mext_next_extent(inode, path, &extent); 5338 if (ret != 0) { 5339 ext4_ext_drop_refs(path); 5340 kfree(path); 5341 if (ret == 1) 5342 ret = 0; --- 126 unchanged lines hidden --- | 5337 if (start > current_block) { 5338 /* Hole, move to the next extent */ 5339 ret = mext_next_extent(inode, path, &extent); 5340 if (ret != 0) { 5341 ext4_ext_drop_refs(path); 5342 kfree(path); 5343 if (ret == 1) 5344 ret = 0; --- 126 unchanged lines hidden --- |