xref: /linux/fs/udf/inode.c (revision d8327c784b51b57dac2c26cfad87dce0d68dfd98)
1 /*
2  * inode.c
3  *
4  * PURPOSE
5  *  Inode handling routines for the OSTA-UDF(tm) filesystem.
6  *
7  * COPYRIGHT
8  *  This file is distributed under the terms of the GNU General Public
9  *  License (GPL). Copies of the GPL can be obtained from:
10  *    ftp://prep.ai.mit.edu/pub/gnu/GPL
11  *  Each contributing author retains all rights to their own work.
12  *
13  *  (C) 1998 Dave Boynton
14  *  (C) 1998-2004 Ben Fennema
15  *  (C) 1999-2000 Stelias Computing Inc
16  *
17  * HISTORY
18  *
19  *  10/04/98 dgb  Added rudimentary directory functions
20  *  10/07/98      Fully working udf_block_map! It works!
21  *  11/25/98      bmap altered to better support extents
22  *  12/06/98 blf  partition support in udf_iget, udf_block_map and udf_read_inode
23  *  12/12/98      rewrote udf_block_map to handle next extents and descs across
24  *                block boundaries (which is not actually allowed)
25  *  12/20/98      added support for strategy 4096
26  *  03/07/99      rewrote udf_block_map (again)
27  *                New funcs, inode_bmap, udf_next_aext
28  *  04/19/99      Support for writing device EA's for major/minor #
29  */
30 
31 #include "udfdecl.h"
32 #include <linux/mm.h>
33 #include <linux/smp_lock.h>
34 #include <linux/module.h>
35 #include <linux/pagemap.h>
36 #include <linux/buffer_head.h>
37 #include <linux/writeback.h>
38 #include <linux/slab.h>
39 
40 #include "udf_i.h"
41 #include "udf_sb.h"
42 
43 MODULE_AUTHOR("Ben Fennema");
44 MODULE_DESCRIPTION("Universal Disk Format Filesystem");
45 MODULE_LICENSE("GPL");
46 
47 #define EXTENT_MERGE_SIZE 5
48 
49 static mode_t udf_convert_permissions(struct fileEntry *);
50 static int udf_update_inode(struct inode *, int);
51 static void udf_fill_inode(struct inode *, struct buffer_head *);
52 static struct buffer_head *inode_getblk(struct inode *, long, int *,
53 	long *, int *);
54 static int8_t udf_insert_aext(struct inode *, kernel_lb_addr, int,
55 	kernel_lb_addr, uint32_t, struct buffer_head *);
56 static void udf_split_extents(struct inode *, int *, int, int,
57 	kernel_long_ad [EXTENT_MERGE_SIZE], int *);
58 static void udf_prealloc_extents(struct inode *, int, int,
59 	 kernel_long_ad [EXTENT_MERGE_SIZE], int *);
60 static void udf_merge_extents(struct inode *,
61 	 kernel_long_ad [EXTENT_MERGE_SIZE], int *);
62 static void udf_update_extents(struct inode *,
63 	kernel_long_ad [EXTENT_MERGE_SIZE], int, int,
64 	kernel_lb_addr, uint32_t, struct buffer_head **);
65 static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
66 
67 /*
68  * udf_delete_inode
69  *
70  * PURPOSE
71  *	Clean-up before the specified inode is destroyed.
72  *
73  * DESCRIPTION
74  *	This routine is called when the kernel destroys an inode structure
75  *	ie. when iput() finds i_count == 0.
76  *
77  * HISTORY
78  *	July 1, 1997 - Andrew E. Mileski
79  *	Written, tested, and released.
80  *
81  *  Called at the last iput() if i_nlink is zero.
82  */
83 void udf_delete_inode(struct inode * inode)
84 {
85 	truncate_inode_pages(&inode->i_data, 0);
86 
87 	if (is_bad_inode(inode))
88 		goto no_delete;
89 
90 	inode->i_size = 0;
91 	udf_truncate(inode);
92 	lock_kernel();
93 
94 	udf_update_inode(inode, IS_SYNC(inode));
95 	udf_free_inode(inode);
96 
97 	unlock_kernel();
98 	return;
99 no_delete:
100 	clear_inode(inode);
101 }
102 
103 void udf_clear_inode(struct inode *inode)
104 {
105 	if (!(inode->i_sb->s_flags & MS_RDONLY)) {
106 		lock_kernel();
107 		udf_discard_prealloc(inode);
108 		unlock_kernel();
109 	}
110 
111 	kfree(UDF_I_DATA(inode));
112 	UDF_I_DATA(inode) = NULL;
113 }
114 
115 static int udf_writepage(struct page *page, struct writeback_control *wbc)
116 {
117 	return block_write_full_page(page, udf_get_block, wbc);
118 }
119 
120 static int udf_readpage(struct file *file, struct page *page)
121 {
122 	return block_read_full_page(page, udf_get_block);
123 }
124 
125 static int udf_prepare_write(struct file *file, struct page *page, unsigned from, unsigned to)
126 {
127 	return block_prepare_write(page, from, to, udf_get_block);
128 }
129 
130 static sector_t udf_bmap(struct address_space *mapping, sector_t block)
131 {
132 	return generic_block_bmap(mapping,block,udf_get_block);
133 }
134 
135 struct address_space_operations udf_aops = {
136 	.readpage		= udf_readpage,
137 	.writepage		= udf_writepage,
138 	.sync_page		= block_sync_page,
139 	.prepare_write		= udf_prepare_write,
140 	.commit_write		= generic_commit_write,
141 	.bmap			= udf_bmap,
142 };
143 
144 void udf_expand_file_adinicb(struct inode * inode, int newsize, int * err)
145 {
146 	struct page *page;
147 	char *kaddr;
148 	struct writeback_control udf_wbc = {
149 		.sync_mode = WB_SYNC_NONE,
150 		.nr_to_write = 1,
151 	};
152 
153 	/* from now on we have normal address_space methods */
154 	inode->i_data.a_ops = &udf_aops;
155 
156 	if (!UDF_I_LENALLOC(inode))
157 	{
158 		if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
159 			UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_SHORT;
160 		else
161 			UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_LONG;
162 		mark_inode_dirty(inode);
163 		return;
164 	}
165 
166 	page = grab_cache_page(inode->i_mapping, 0);
167 	BUG_ON(!PageLocked(page));
168 
169 	if (!PageUptodate(page))
170 	{
171 		kaddr = kmap(page);
172 		memset(kaddr + UDF_I_LENALLOC(inode), 0x00,
173 			PAGE_CACHE_SIZE - UDF_I_LENALLOC(inode));
174 		memcpy(kaddr, UDF_I_DATA(inode) + UDF_I_LENEATTR(inode),
175 			UDF_I_LENALLOC(inode));
176 		flush_dcache_page(page);
177 		SetPageUptodate(page);
178 		kunmap(page);
179 	}
180 	memset(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode), 0x00,
181 		UDF_I_LENALLOC(inode));
182 	UDF_I_LENALLOC(inode) = 0;
183 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
184 		UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_SHORT;
185 	else
186 		UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_LONG;
187 
188 	inode->i_data.a_ops->writepage(page, &udf_wbc);
189 	page_cache_release(page);
190 
191 	mark_inode_dirty(inode);
192 }
193 
194 struct buffer_head * udf_expand_dir_adinicb(struct inode *inode, int *block, int *err)
195 {
196 	int newblock;
197 	struct buffer_head *sbh = NULL, *dbh = NULL;
198 	kernel_lb_addr bloc, eloc;
199 	uint32_t elen, extoffset;
200 	uint8_t alloctype;
201 
202 	struct udf_fileident_bh sfibh, dfibh;
203 	loff_t f_pos = udf_ext0_offset(inode) >> 2;
204 	int size = (udf_ext0_offset(inode) + inode->i_size) >> 2;
205 	struct fileIdentDesc cfi, *sfi, *dfi;
206 
207 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
208 		alloctype = ICBTAG_FLAG_AD_SHORT;
209 	else
210 		alloctype = ICBTAG_FLAG_AD_LONG;
211 
212 	if (!inode->i_size)
213 	{
214 		UDF_I_ALLOCTYPE(inode) = alloctype;
215 		mark_inode_dirty(inode);
216 		return NULL;
217 	}
218 
219 	/* alloc block, and copy data to it */
220 	*block = udf_new_block(inode->i_sb, inode,
221 		UDF_I_LOCATION(inode).partitionReferenceNum,
222 		UDF_I_LOCATION(inode).logicalBlockNum, err);
223 
224 	if (!(*block))
225 		return NULL;
226 	newblock = udf_get_pblock(inode->i_sb, *block,
227 		UDF_I_LOCATION(inode).partitionReferenceNum, 0);
228 	if (!newblock)
229 		return NULL;
230 	dbh = udf_tgetblk(inode->i_sb, newblock);
231 	if (!dbh)
232 		return NULL;
233 	lock_buffer(dbh);
234 	memset(dbh->b_data, 0x00, inode->i_sb->s_blocksize);
235 	set_buffer_uptodate(dbh);
236 	unlock_buffer(dbh);
237 	mark_buffer_dirty_inode(dbh, inode);
238 
239 	sfibh.soffset = sfibh.eoffset = (f_pos & ((inode->i_sb->s_blocksize - 1) >> 2)) << 2;
240 	sbh = sfibh.sbh = sfibh.ebh = NULL;
241 	dfibh.soffset = dfibh.eoffset = 0;
242 	dfibh.sbh = dfibh.ebh = dbh;
243 	while ( (f_pos < size) )
244 	{
245 		UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_IN_ICB;
246 		sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL, NULL, NULL, NULL, NULL, NULL);
247 		if (!sfi)
248 		{
249 			udf_release_data(dbh);
250 			return NULL;
251 		}
252 		UDF_I_ALLOCTYPE(inode) = alloctype;
253 		sfi->descTag.tagLocation = cpu_to_le32(*block);
254 		dfibh.soffset = dfibh.eoffset;
255 		dfibh.eoffset += (sfibh.eoffset - sfibh.soffset);
256 		dfi = (struct fileIdentDesc *)(dbh->b_data + dfibh.soffset);
257 		if (udf_write_fi(inode, sfi, dfi, &dfibh, sfi->impUse,
258 			sfi->fileIdent + le16_to_cpu(sfi->lengthOfImpUse)))
259 		{
260 			UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_IN_ICB;
261 			udf_release_data(dbh);
262 			return NULL;
263 		}
264 	}
265 	mark_buffer_dirty_inode(dbh, inode);
266 
267 	memset(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode), 0, UDF_I_LENALLOC(inode));
268 	UDF_I_LENALLOC(inode) = 0;
269 	bloc = UDF_I_LOCATION(inode);
270 	eloc.logicalBlockNum = *block;
271 	eloc.partitionReferenceNum = UDF_I_LOCATION(inode).partitionReferenceNum;
272 	elen = inode->i_size;
273 	UDF_I_LENEXTENTS(inode) = elen;
274 	extoffset = udf_file_entry_alloc_offset(inode);
275 	udf_add_aext(inode, &bloc, &extoffset, eloc, elen, &sbh, 0);
276 	/* UniqueID stuff */
277 
278 	udf_release_data(sbh);
279 	mark_inode_dirty(inode);
280 	return dbh;
281 }
282 
283 static int udf_get_block(struct inode *inode, sector_t block, struct buffer_head *bh_result, int create)
284 {
285 	int err, new;
286 	struct buffer_head *bh;
287 	unsigned long phys;
288 
289 	if (!create)
290 	{
291 		phys = udf_block_map(inode, block);
292 		if (phys)
293 			map_bh(bh_result, inode->i_sb, phys);
294 		return 0;
295 	}
296 
297 	err = -EIO;
298 	new = 0;
299 	bh = NULL;
300 
301 	lock_kernel();
302 
303 	if (block < 0)
304 		goto abort_negative;
305 
306 	if (block == UDF_I_NEXT_ALLOC_BLOCK(inode) + 1)
307 	{
308 		UDF_I_NEXT_ALLOC_BLOCK(inode) ++;
309 		UDF_I_NEXT_ALLOC_GOAL(inode) ++;
310 	}
311 
312 	err = 0;
313 
314 	bh = inode_getblk(inode, block, &err, &phys, &new);
315 	if (bh)
316 		BUG();
317 	if (err)
318 		goto abort;
319 	if (!phys)
320 		BUG();
321 
322 	if (new)
323 		set_buffer_new(bh_result);
324 	map_bh(bh_result, inode->i_sb, phys);
325 abort:
326 	unlock_kernel();
327 	return err;
328 
329 abort_negative:
330 	udf_warning(inode->i_sb, "udf_get_block", "block < 0");
331 	goto abort;
332 }
333 
334 static struct buffer_head *
335 udf_getblk(struct inode *inode, long block, int create, int *err)
336 {
337 	struct buffer_head dummy;
338 
339 	dummy.b_state = 0;
340 	dummy.b_blocknr = -1000;
341 	*err = udf_get_block(inode, block, &dummy, create);
342 	if (!*err && buffer_mapped(&dummy))
343 	{
344 		struct buffer_head *bh;
345 		bh = sb_getblk(inode->i_sb, dummy.b_blocknr);
346 		if (buffer_new(&dummy))
347 		{
348 			lock_buffer(bh);
349 			memset(bh->b_data, 0x00, inode->i_sb->s_blocksize);
350 			set_buffer_uptodate(bh);
351 			unlock_buffer(bh);
352 			mark_buffer_dirty_inode(bh, inode);
353 		}
354 		return bh;
355 	}
356 	return NULL;
357 }
358 
359 static struct buffer_head * inode_getblk(struct inode * inode, long block,
360 	int *err, long *phys, int *new)
361 {
362 	struct buffer_head *pbh = NULL, *cbh = NULL, *nbh = NULL, *result = NULL;
363 	kernel_long_ad laarr[EXTENT_MERGE_SIZE];
364 	uint32_t pextoffset = 0, cextoffset = 0, nextoffset = 0;
365 	int count = 0, startnum = 0, endnum = 0;
366 	uint32_t elen = 0;
367 	kernel_lb_addr eloc, pbloc, cbloc, nbloc;
368 	int c = 1;
369 	uint64_t lbcount = 0, b_off = 0;
370 	uint32_t newblocknum, newblock, offset = 0;
371 	int8_t etype;
372 	int goal = 0, pgoal = UDF_I_LOCATION(inode).logicalBlockNum;
373 	char lastblock = 0;
374 
375 	pextoffset = cextoffset = nextoffset = udf_file_entry_alloc_offset(inode);
376 	b_off = (uint64_t)block << inode->i_sb->s_blocksize_bits;
377 	pbloc = cbloc = nbloc = UDF_I_LOCATION(inode);
378 
379 	/* find the extent which contains the block we are looking for.
380        alternate between laarr[0] and laarr[1] for locations of the
381        current extent, and the previous extent */
382 	do
383 	{
384 		if (pbh != cbh)
385 		{
386 			udf_release_data(pbh);
387 			atomic_inc(&cbh->b_count);
388 			pbh = cbh;
389 		}
390 		if (cbh != nbh)
391 		{
392 			udf_release_data(cbh);
393 			atomic_inc(&nbh->b_count);
394 			cbh = nbh;
395 		}
396 
397 		lbcount += elen;
398 
399 		pbloc = cbloc;
400 		cbloc = nbloc;
401 
402 		pextoffset = cextoffset;
403 		cextoffset = nextoffset;
404 
405 		if ((etype = udf_next_aext(inode, &nbloc, &nextoffset, &eloc, &elen, &nbh, 1)) == -1)
406 			break;
407 
408 		c = !c;
409 
410 		laarr[c].extLength = (etype << 30) | elen;
411 		laarr[c].extLocation = eloc;
412 
413 		if (etype != (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
414 			pgoal = eloc.logicalBlockNum +
415 				((elen + inode->i_sb->s_blocksize - 1) >>
416 				inode->i_sb->s_blocksize_bits);
417 
418 		count ++;
419 	} while (lbcount + elen <= b_off);
420 
421 	b_off -= lbcount;
422 	offset = b_off >> inode->i_sb->s_blocksize_bits;
423 
424 	/* if the extent is allocated and recorded, return the block
425        if the extent is not a multiple of the blocksize, round up */
426 
427 	if (etype == (EXT_RECORDED_ALLOCATED >> 30))
428 	{
429 		if (elen & (inode->i_sb->s_blocksize - 1))
430 		{
431 			elen = EXT_RECORDED_ALLOCATED |
432 				((elen + inode->i_sb->s_blocksize - 1) &
433 				~(inode->i_sb->s_blocksize - 1));
434 			etype = udf_write_aext(inode, nbloc, &cextoffset, eloc, elen, nbh, 1);
435 		}
436 		udf_release_data(pbh);
437 		udf_release_data(cbh);
438 		udf_release_data(nbh);
439 		newblock = udf_get_lb_pblock(inode->i_sb, eloc, offset);
440 		*phys = newblock;
441 		return NULL;
442 	}
443 
444 	if (etype == -1)
445 	{
446 		endnum = startnum = ((count > 1) ? 1 : count);
447 		if (laarr[c].extLength & (inode->i_sb->s_blocksize - 1))
448 		{
449 			laarr[c].extLength =
450 				(laarr[c].extLength & UDF_EXTENT_FLAG_MASK) |
451 				(((laarr[c].extLength & UDF_EXTENT_LENGTH_MASK) +
452 					inode->i_sb->s_blocksize - 1) &
453 				~(inode->i_sb->s_blocksize - 1));
454 			UDF_I_LENEXTENTS(inode) =
455 				(UDF_I_LENEXTENTS(inode) + inode->i_sb->s_blocksize - 1) &
456 					~(inode->i_sb->s_blocksize - 1);
457 		}
458 		c = !c;
459 		laarr[c].extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
460 			((offset + 1) << inode->i_sb->s_blocksize_bits);
461 		memset(&laarr[c].extLocation, 0x00, sizeof(kernel_lb_addr));
462 		count ++;
463 		endnum ++;
464 		lastblock = 1;
465 	}
466 	else
467 		endnum = startnum = ((count > 2) ? 2 : count);
468 
469 	/* if the current extent is in position 0, swap it with the previous */
470 	if (!c && count != 1)
471 	{
472 		laarr[2] = laarr[0];
473 		laarr[0] = laarr[1];
474 		laarr[1] = laarr[2];
475 		c = 1;
476 	}
477 
478 	/* if the current block is located in a extent, read the next extent */
479 	if (etype != -1)
480 	{
481 		if ((etype = udf_next_aext(inode, &nbloc, &nextoffset, &eloc, &elen, &nbh, 0)) != -1)
482 		{
483 			laarr[c+1].extLength = (etype << 30) | elen;
484 			laarr[c+1].extLocation = eloc;
485 			count ++;
486 			startnum ++;
487 			endnum ++;
488 		}
489 		else
490 			lastblock = 1;
491 	}
492 	udf_release_data(cbh);
493 	udf_release_data(nbh);
494 
495 	/* if the current extent is not recorded but allocated, get the
496 		block in the extent corresponding to the requested block */
497 	if ((laarr[c].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
498 		newblocknum = laarr[c].extLocation.logicalBlockNum + offset;
499 	else /* otherwise, allocate a new block */
500 	{
501 		if (UDF_I_NEXT_ALLOC_BLOCK(inode) == block)
502 			goal = UDF_I_NEXT_ALLOC_GOAL(inode);
503 
504 		if (!goal)
505 		{
506 			if (!(goal = pgoal))
507 				goal = UDF_I_LOCATION(inode).logicalBlockNum + 1;
508 		}
509 
510 		if (!(newblocknum = udf_new_block(inode->i_sb, inode,
511 			UDF_I_LOCATION(inode).partitionReferenceNum, goal, err)))
512 		{
513 			udf_release_data(pbh);
514 			*err = -ENOSPC;
515 			return NULL;
516 		}
517 		UDF_I_LENEXTENTS(inode) += inode->i_sb->s_blocksize;
518 	}
519 
520 	/* if the extent the requsted block is located in contains multiple blocks,
521        split the extent into at most three extents. blocks prior to requested
522        block, requested block, and blocks after requested block */
523 	udf_split_extents(inode, &c, offset, newblocknum, laarr, &endnum);
524 
525 #ifdef UDF_PREALLOCATE
526 	/* preallocate blocks */
527 	udf_prealloc_extents(inode, c, lastblock, laarr, &endnum);
528 #endif
529 
530 	/* merge any continuous blocks in laarr */
531 	udf_merge_extents(inode, laarr, &endnum);
532 
533 	/* write back the new extents, inserting new extents if the new number
534        of extents is greater than the old number, and deleting extents if
535        the new number of extents is less than the old number */
536 	udf_update_extents(inode, laarr, startnum, endnum, pbloc, pextoffset, &pbh);
537 
538 	udf_release_data(pbh);
539 
540 	if (!(newblock = udf_get_pblock(inode->i_sb, newblocknum,
541 		UDF_I_LOCATION(inode).partitionReferenceNum, 0)))
542 	{
543 		return NULL;
544 	}
545 	*phys = newblock;
546 	*err = 0;
547 	*new = 1;
548 	UDF_I_NEXT_ALLOC_BLOCK(inode) = block;
549 	UDF_I_NEXT_ALLOC_GOAL(inode) = newblocknum;
550 	inode->i_ctime = current_fs_time(inode->i_sb);
551 
552 	if (IS_SYNC(inode))
553 		udf_sync_inode(inode);
554 	else
555 		mark_inode_dirty(inode);
556 	return result;
557 }
558 
559 static void udf_split_extents(struct inode *inode, int *c, int offset, int newblocknum,
560 	kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
561 {
562 	if ((laarr[*c].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30) ||
563 		(laarr[*c].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
564 	{
565 		int curr = *c;
566 		int blen = ((laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK) +
567 			inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits;
568 		int8_t etype = (laarr[curr].extLength >> 30);
569 
570 		if (blen == 1)
571 			;
572 		else if (!offset || blen == offset + 1)
573 		{
574 			laarr[curr+2] = laarr[curr+1];
575 			laarr[curr+1] = laarr[curr];
576 		}
577 		else
578 		{
579 			laarr[curr+3] = laarr[curr+1];
580 			laarr[curr+2] = laarr[curr+1] = laarr[curr];
581 		}
582 
583 		if (offset)
584 		{
585 			if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30))
586 			{
587 				udf_free_blocks(inode->i_sb, inode, laarr[curr].extLocation, 0, offset);
588 				laarr[curr].extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
589 					(offset << inode->i_sb->s_blocksize_bits);
590 				laarr[curr].extLocation.logicalBlockNum = 0;
591 				laarr[curr].extLocation.partitionReferenceNum = 0;
592 			}
593 			else
594 				laarr[curr].extLength = (etype << 30) |
595 					(offset << inode->i_sb->s_blocksize_bits);
596 			curr ++;
597 			(*c) ++;
598 			(*endnum) ++;
599 		}
600 
601 		laarr[curr].extLocation.logicalBlockNum = newblocknum;
602 		if (etype == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
603 			laarr[curr].extLocation.partitionReferenceNum =
604 				UDF_I_LOCATION(inode).partitionReferenceNum;
605 		laarr[curr].extLength = EXT_RECORDED_ALLOCATED |
606 			inode->i_sb->s_blocksize;
607 		curr ++;
608 
609 		if (blen != offset + 1)
610 		{
611 			if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30))
612 				laarr[curr].extLocation.logicalBlockNum += (offset + 1);
613 			laarr[curr].extLength = (etype << 30) |
614 				((blen - (offset + 1)) << inode->i_sb->s_blocksize_bits);
615 			curr ++;
616 			(*endnum) ++;
617 		}
618 	}
619 }
620 
621 static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
622 	 kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
623 {
624 	int start, length = 0, currlength = 0, i;
625 
626 	if (*endnum >= (c+1))
627 	{
628 		if (!lastblock)
629 			return;
630 		else
631 			start = c;
632 	}
633 	else
634 	{
635 		if ((laarr[c+1].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
636 		{
637 			start = c+1;
638 			length = currlength = (((laarr[c+1].extLength & UDF_EXTENT_LENGTH_MASK) +
639 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
640 		}
641 		else
642 			start = c;
643 	}
644 
645 	for (i=start+1; i<=*endnum; i++)
646 	{
647 		if (i == *endnum)
648 		{
649 			if (lastblock)
650 				length += UDF_DEFAULT_PREALLOC_BLOCKS;
651 		}
652 		else if ((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
653 			length += (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
654 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
655 		else
656 			break;
657 	}
658 
659 	if (length)
660 	{
661 		int next = laarr[start].extLocation.logicalBlockNum +
662 			(((laarr[start].extLength & UDF_EXTENT_LENGTH_MASK) +
663 			inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
664 		int numalloc = udf_prealloc_blocks(inode->i_sb, inode,
665 			laarr[start].extLocation.partitionReferenceNum,
666 			next, (UDF_DEFAULT_PREALLOC_BLOCKS > length ? length :
667 				UDF_DEFAULT_PREALLOC_BLOCKS) - currlength);
668 
669 		if (numalloc)
670 		{
671 			if (start == (c+1))
672 				laarr[start].extLength +=
673 					(numalloc << inode->i_sb->s_blocksize_bits);
674 			else
675 			{
676 				memmove(&laarr[c+2], &laarr[c+1],
677 					sizeof(long_ad) * (*endnum - (c+1)));
678 				(*endnum) ++;
679 				laarr[c+1].extLocation.logicalBlockNum = next;
680 				laarr[c+1].extLocation.partitionReferenceNum =
681 					laarr[c].extLocation.partitionReferenceNum;
682 				laarr[c+1].extLength = EXT_NOT_RECORDED_ALLOCATED |
683 					(numalloc << inode->i_sb->s_blocksize_bits);
684 				start = c+1;
685 			}
686 
687 			for (i=start+1; numalloc && i<*endnum; i++)
688 			{
689 				int elen = ((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
690 					inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits;
691 
692 				if (elen > numalloc)
693 				{
694 					laarr[i].extLength -=
695 						(numalloc << inode->i_sb->s_blocksize_bits);
696 					numalloc = 0;
697 				}
698 				else
699 				{
700 					numalloc -= elen;
701 					if (*endnum > (i+1))
702 						memmove(&laarr[i], &laarr[i+1],
703 							sizeof(long_ad) * (*endnum - (i+1)));
704 					i --;
705 					(*endnum) --;
706 				}
707 			}
708 			UDF_I_LENEXTENTS(inode) += numalloc << inode->i_sb->s_blocksize_bits;
709 		}
710 	}
711 }
712 
713 static void udf_merge_extents(struct inode *inode,
714 	 kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
715 {
716 	int i;
717 
718 	for (i=0; i<(*endnum-1); i++)
719 	{
720 		if ((laarr[i].extLength >> 30) == (laarr[i+1].extLength >> 30))
721 		{
722 			if (((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) ||
723 				((laarr[i+1].extLocation.logicalBlockNum - laarr[i].extLocation.logicalBlockNum) ==
724 				(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
725 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits)))
726 			{
727 				if (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
728 					(laarr[i+1].extLength & UDF_EXTENT_LENGTH_MASK) +
729 					inode->i_sb->s_blocksize - 1) & ~UDF_EXTENT_LENGTH_MASK)
730 				{
731 					laarr[i+1].extLength = (laarr[i+1].extLength -
732 						(laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
733 						UDF_EXTENT_LENGTH_MASK) & ~(inode->i_sb->s_blocksize-1);
734 					laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_FLAG_MASK) +
735 						(UDF_EXTENT_LENGTH_MASK + 1) - inode->i_sb->s_blocksize;
736 					laarr[i+1].extLocation.logicalBlockNum =
737 						laarr[i].extLocation.logicalBlockNum +
738 						((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) >>
739 							inode->i_sb->s_blocksize_bits);
740 				}
741 				else
742 				{
743 					laarr[i].extLength = laarr[i+1].extLength +
744 						(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
745 						inode->i_sb->s_blocksize - 1) & ~(inode->i_sb->s_blocksize-1));
746 					if (*endnum > (i+2))
747 						memmove(&laarr[i+1], &laarr[i+2],
748 							sizeof(long_ad) * (*endnum - (i+2)));
749 					i --;
750 					(*endnum) --;
751 				}
752 			}
753 		}
754 		else if (((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30)) &&
755 			((laarr[i+1].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)))
756 		{
757 			udf_free_blocks(inode->i_sb, inode, laarr[i].extLocation, 0,
758 				((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
759 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
760 			laarr[i].extLocation.logicalBlockNum = 0;
761 			laarr[i].extLocation.partitionReferenceNum = 0;
762 
763 			if (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
764 				(laarr[i+1].extLength & UDF_EXTENT_LENGTH_MASK) +
765 				inode->i_sb->s_blocksize - 1) & ~UDF_EXTENT_LENGTH_MASK)
766 			{
767 				laarr[i+1].extLength = (laarr[i+1].extLength -
768 					(laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
769 					UDF_EXTENT_LENGTH_MASK) & ~(inode->i_sb->s_blocksize-1);
770 				laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_FLAG_MASK) +
771 					(UDF_EXTENT_LENGTH_MASK + 1) - inode->i_sb->s_blocksize;
772 			}
773 			else
774 			{
775 				laarr[i].extLength = laarr[i+1].extLength +
776 					(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
777 					inode->i_sb->s_blocksize - 1) & ~(inode->i_sb->s_blocksize-1));
778 				if (*endnum > (i+2))
779 					memmove(&laarr[i+1], &laarr[i+2],
780 						sizeof(long_ad) * (*endnum - (i+2)));
781 				i --;
782 				(*endnum) --;
783 			}
784 		}
785 		else if ((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
786 		{
787 			udf_free_blocks(inode->i_sb, inode, laarr[i].extLocation, 0,
788 				((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
789 			       inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
790 			laarr[i].extLocation.logicalBlockNum = 0;
791 			laarr[i].extLocation.partitionReferenceNum = 0;
792 			laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) |
793 				EXT_NOT_RECORDED_NOT_ALLOCATED;
794 		}
795 	}
796 }
797 
798 static void udf_update_extents(struct inode *inode,
799 	kernel_long_ad laarr[EXTENT_MERGE_SIZE], int startnum, int endnum,
800 	kernel_lb_addr pbloc, uint32_t pextoffset, struct buffer_head **pbh)
801 {
802 	int start = 0, i;
803 	kernel_lb_addr tmploc;
804 	uint32_t tmplen;
805 
806 	if (startnum > endnum)
807 	{
808 		for (i=0; i<(startnum-endnum); i++)
809 		{
810 			udf_delete_aext(inode, pbloc, pextoffset, laarr[i].extLocation,
811 				laarr[i].extLength, *pbh);
812 		}
813 	}
814 	else if (startnum < endnum)
815 	{
816 		for (i=0; i<(endnum-startnum); i++)
817 		{
818 			udf_insert_aext(inode, pbloc, pextoffset, laarr[i].extLocation,
819 				laarr[i].extLength, *pbh);
820 			udf_next_aext(inode, &pbloc, &pextoffset, &laarr[i].extLocation,
821 				&laarr[i].extLength, pbh, 1);
822 			start ++;
823 		}
824 	}
825 
826 	for (i=start; i<endnum; i++)
827 	{
828 		udf_next_aext(inode, &pbloc, &pextoffset, &tmploc, &tmplen, pbh, 0);
829 		udf_write_aext(inode, pbloc, &pextoffset, laarr[i].extLocation,
830 			laarr[i].extLength, *pbh, 1);
831 	}
832 }
833 
834 struct buffer_head * udf_bread(struct inode * inode, int block,
835 	int create, int * err)
836 {
837 	struct buffer_head * bh = NULL;
838 
839 	bh = udf_getblk(inode, block, create, err);
840 	if (!bh)
841 		return NULL;
842 
843 	if (buffer_uptodate(bh))
844 		return bh;
845 	ll_rw_block(READ, 1, &bh);
846 	wait_on_buffer(bh);
847 	if (buffer_uptodate(bh))
848 		return bh;
849 	brelse(bh);
850 	*err = -EIO;
851 	return NULL;
852 }
853 
854 void udf_truncate(struct inode * inode)
855 {
856 	int offset;
857 	int err;
858 
859 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
860 			S_ISLNK(inode->i_mode)))
861 		return;
862 	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
863 		return;
864 
865 	lock_kernel();
866 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
867 	{
868 		if (inode->i_sb->s_blocksize < (udf_file_entry_alloc_offset(inode) +
869 			inode->i_size))
870 		{
871 			udf_expand_file_adinicb(inode, inode->i_size, &err);
872 			if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
873 			{
874 				inode->i_size = UDF_I_LENALLOC(inode);
875 				unlock_kernel();
876 				return;
877 			}
878 			else
879 				udf_truncate_extents(inode);
880 		}
881 		else
882 		{
883 			offset = inode->i_size & (inode->i_sb->s_blocksize - 1);
884 			memset(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode) + offset, 0x00, inode->i_sb->s_blocksize - offset - udf_file_entry_alloc_offset(inode));
885 			UDF_I_LENALLOC(inode) = inode->i_size;
886 		}
887 	}
888 	else
889 	{
890 		block_truncate_page(inode->i_mapping, inode->i_size, udf_get_block);
891 		udf_truncate_extents(inode);
892 	}
893 
894 	inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb);
895 	if (IS_SYNC(inode))
896 		udf_sync_inode (inode);
897 	else
898 		mark_inode_dirty(inode);
899 	unlock_kernel();
900 }
901 
902 static void
903 __udf_read_inode(struct inode *inode)
904 {
905 	struct buffer_head *bh = NULL;
906 	struct fileEntry *fe;
907 	uint16_t ident;
908 
909 	/*
910 	 * Set defaults, but the inode is still incomplete!
911 	 * Note: get_new_inode() sets the following on a new inode:
912 	 *      i_sb = sb
913 	 *      i_no = ino
914 	 *      i_flags = sb->s_flags
915 	 *      i_state = 0
916 	 * clean_inode(): zero fills and sets
917 	 *      i_count = 1
918 	 *      i_nlink = 1
919 	 *      i_op = NULL;
920 	 */
921 	inode->i_blksize = PAGE_SIZE;
922 
923 	bh = udf_read_ptagged(inode->i_sb, UDF_I_LOCATION(inode), 0, &ident);
924 
925 	if (!bh)
926 	{
927 		printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed !bh\n",
928 			inode->i_ino);
929 		make_bad_inode(inode);
930 		return;
931 	}
932 
933 	if (ident != TAG_IDENT_FE && ident != TAG_IDENT_EFE &&
934 		ident != TAG_IDENT_USE)
935 	{
936 		printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed ident=%d\n",
937 			inode->i_ino, ident);
938 		udf_release_data(bh);
939 		make_bad_inode(inode);
940 		return;
941 	}
942 
943 	fe = (struct fileEntry *)bh->b_data;
944 
945 	if (le16_to_cpu(fe->icbTag.strategyType) == 4096)
946 	{
947 		struct buffer_head *ibh = NULL, *nbh = NULL;
948 		struct indirectEntry *ie;
949 
950 		ibh = udf_read_ptagged(inode->i_sb, UDF_I_LOCATION(inode), 1, &ident);
951 		if (ident == TAG_IDENT_IE)
952 		{
953 			if (ibh)
954 			{
955 				kernel_lb_addr loc;
956 				ie = (struct indirectEntry *)ibh->b_data;
957 
958 				loc = lelb_to_cpu(ie->indirectICB.extLocation);
959 
960 				if (ie->indirectICB.extLength &&
961 					(nbh = udf_read_ptagged(inode->i_sb, loc, 0, &ident)))
962 				{
963 					if (ident == TAG_IDENT_FE ||
964 						ident == TAG_IDENT_EFE)
965 					{
966 						memcpy(&UDF_I_LOCATION(inode), &loc, sizeof(kernel_lb_addr));
967 						udf_release_data(bh);
968 						udf_release_data(ibh);
969 						udf_release_data(nbh);
970 						__udf_read_inode(inode);
971 						return;
972 					}
973 					else
974 					{
975 						udf_release_data(nbh);
976 						udf_release_data(ibh);
977 					}
978 				}
979 				else
980 					udf_release_data(ibh);
981 			}
982 		}
983 		else
984 			udf_release_data(ibh);
985 	}
986 	else if (le16_to_cpu(fe->icbTag.strategyType) != 4)
987 	{
988 		printk(KERN_ERR "udf: unsupported strategy type: %d\n",
989 			le16_to_cpu(fe->icbTag.strategyType));
990 		udf_release_data(bh);
991 		make_bad_inode(inode);
992 		return;
993 	}
994 	udf_fill_inode(inode, bh);
995 	udf_release_data(bh);
996 }
997 
998 static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
999 {
1000 	struct fileEntry *fe;
1001 	struct extendedFileEntry *efe;
1002 	time_t convtime;
1003 	long convtime_usec;
1004 	int offset;
1005 
1006 	fe = (struct fileEntry *)bh->b_data;
1007 	efe = (struct extendedFileEntry *)bh->b_data;
1008 
1009 	if (le16_to_cpu(fe->icbTag.strategyType) == 4)
1010 		UDF_I_STRAT4096(inode) = 0;
1011 	else /* if (le16_to_cpu(fe->icbTag.strategyType) == 4096) */
1012 		UDF_I_STRAT4096(inode) = 1;
1013 
1014 	UDF_I_ALLOCTYPE(inode) = le16_to_cpu(fe->icbTag.flags) & ICBTAG_FLAG_AD_MASK;
1015 	UDF_I_UNIQUE(inode) = 0;
1016 	UDF_I_LENEATTR(inode) = 0;
1017 	UDF_I_LENEXTENTS(inode) = 0;
1018 	UDF_I_LENALLOC(inode) = 0;
1019 	UDF_I_NEXT_ALLOC_BLOCK(inode) = 0;
1020 	UDF_I_NEXT_ALLOC_GOAL(inode) = 0;
1021 	if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_EFE)
1022 	{
1023 		UDF_I_EFE(inode) = 1;
1024 		UDF_I_USE(inode) = 0;
1025 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry), GFP_KERNEL);
1026 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct extendedFileEntry), inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry));
1027 	}
1028 	else if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_FE)
1029 	{
1030 		UDF_I_EFE(inode) = 0;
1031 		UDF_I_USE(inode) = 0;
1032 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct fileEntry), GFP_KERNEL);
1033 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct fileEntry), inode->i_sb->s_blocksize - sizeof(struct fileEntry));
1034 	}
1035 	else if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_USE)
1036 	{
1037 		UDF_I_EFE(inode) = 0;
1038 		UDF_I_USE(inode) = 1;
1039 		UDF_I_LENALLOC(inode) =
1040 			le32_to_cpu(
1041 				((struct unallocSpaceEntry *)bh->b_data)->lengthAllocDescs);
1042 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry), GFP_KERNEL);
1043 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct unallocSpaceEntry), inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry));
1044 		return;
1045 	}
1046 
1047 	inode->i_uid = le32_to_cpu(fe->uid);
1048 	if (inode->i_uid == -1 || UDF_QUERY_FLAG(inode->i_sb,
1049 					UDF_FLAG_UID_IGNORE))
1050 		inode->i_uid = UDF_SB(inode->i_sb)->s_uid;
1051 
1052 	inode->i_gid = le32_to_cpu(fe->gid);
1053 	if (inode->i_gid == -1 || UDF_QUERY_FLAG(inode->i_sb,
1054 					UDF_FLAG_GID_IGNORE))
1055 		inode->i_gid = UDF_SB(inode->i_sb)->s_gid;
1056 
1057 	inode->i_nlink = le16_to_cpu(fe->fileLinkCount);
1058 	if (!inode->i_nlink)
1059 		inode->i_nlink = 1;
1060 
1061 	inode->i_size = le64_to_cpu(fe->informationLength);
1062 	UDF_I_LENEXTENTS(inode) = inode->i_size;
1063 
1064 	inode->i_mode = udf_convert_permissions(fe);
1065 	inode->i_mode &= ~UDF_SB(inode->i_sb)->s_umask;
1066 
1067 	if (UDF_I_EFE(inode) == 0)
1068 	{
1069 		inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) <<
1070 			(inode->i_sb->s_blocksize_bits - 9);
1071 
1072 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1073 			lets_to_cpu(fe->accessTime)) )
1074 		{
1075 			inode->i_atime.tv_sec = convtime;
1076 			inode->i_atime.tv_nsec = convtime_usec * 1000;
1077 		}
1078 		else
1079 		{
1080 			inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb);
1081 		}
1082 
1083 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1084 			lets_to_cpu(fe->modificationTime)) )
1085 		{
1086 			inode->i_mtime.tv_sec = convtime;
1087 			inode->i_mtime.tv_nsec = convtime_usec * 1000;
1088 		}
1089 		else
1090 		{
1091 			inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb);
1092 		}
1093 
1094 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1095 			lets_to_cpu(fe->attrTime)) )
1096 		{
1097 			inode->i_ctime.tv_sec = convtime;
1098 			inode->i_ctime.tv_nsec = convtime_usec * 1000;
1099 		}
1100 		else
1101 		{
1102 			inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb);
1103 		}
1104 
1105 		UDF_I_UNIQUE(inode) = le64_to_cpu(fe->uniqueID);
1106 		UDF_I_LENEATTR(inode) = le32_to_cpu(fe->lengthExtendedAttr);
1107 		UDF_I_LENALLOC(inode) = le32_to_cpu(fe->lengthAllocDescs);
1108 		offset = sizeof(struct fileEntry) + UDF_I_LENEATTR(inode);
1109 	}
1110 	else
1111 	{
1112 		inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) <<
1113 			(inode->i_sb->s_blocksize_bits - 9);
1114 
1115 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1116 			lets_to_cpu(efe->accessTime)) )
1117 		{
1118 			inode->i_atime.tv_sec = convtime;
1119 			inode->i_atime.tv_nsec = convtime_usec * 1000;
1120 		}
1121 		else
1122 		{
1123 			inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb);
1124 		}
1125 
1126 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1127 			lets_to_cpu(efe->modificationTime)) )
1128 		{
1129 			inode->i_mtime.tv_sec = convtime;
1130 			inode->i_mtime.tv_nsec = convtime_usec * 1000;
1131 		}
1132 		else
1133 		{
1134 			inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb);
1135 		}
1136 
1137 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1138 			lets_to_cpu(efe->createTime)) )
1139 		{
1140 			UDF_I_CRTIME(inode).tv_sec = convtime;
1141 			UDF_I_CRTIME(inode).tv_nsec = convtime_usec * 1000;
1142 		}
1143 		else
1144 		{
1145 			UDF_I_CRTIME(inode) = UDF_SB_RECORDTIME(inode->i_sb);
1146 		}
1147 
1148 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1149 			lets_to_cpu(efe->attrTime)) )
1150 		{
1151 			inode->i_ctime.tv_sec = convtime;
1152 			inode->i_ctime.tv_nsec = convtime_usec * 1000;
1153 		}
1154 		else
1155 		{
1156 			inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb);
1157 		}
1158 
1159 		UDF_I_UNIQUE(inode) = le64_to_cpu(efe->uniqueID);
1160 		UDF_I_LENEATTR(inode) = le32_to_cpu(efe->lengthExtendedAttr);
1161 		UDF_I_LENALLOC(inode) = le32_to_cpu(efe->lengthAllocDescs);
1162 		offset = sizeof(struct extendedFileEntry) + UDF_I_LENEATTR(inode);
1163 	}
1164 
1165 	switch (fe->icbTag.fileType)
1166 	{
1167 		case ICBTAG_FILE_TYPE_DIRECTORY:
1168 		{
1169 			inode->i_op = &udf_dir_inode_operations;
1170 			inode->i_fop = &udf_dir_operations;
1171 			inode->i_mode |= S_IFDIR;
1172 			inode->i_nlink ++;
1173 			break;
1174 		}
1175 		case ICBTAG_FILE_TYPE_REALTIME:
1176 		case ICBTAG_FILE_TYPE_REGULAR:
1177 		case ICBTAG_FILE_TYPE_UNDEF:
1178 		{
1179 			if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
1180 				inode->i_data.a_ops = &udf_adinicb_aops;
1181 			else
1182 				inode->i_data.a_ops = &udf_aops;
1183 			inode->i_op = &udf_file_inode_operations;
1184 			inode->i_fop = &udf_file_operations;
1185 			inode->i_mode |= S_IFREG;
1186 			break;
1187 		}
1188 		case ICBTAG_FILE_TYPE_BLOCK:
1189 		{
1190 			inode->i_mode |= S_IFBLK;
1191 			break;
1192 		}
1193 		case ICBTAG_FILE_TYPE_CHAR:
1194 		{
1195 			inode->i_mode |= S_IFCHR;
1196 			break;
1197 		}
1198 		case ICBTAG_FILE_TYPE_FIFO:
1199 		{
1200 			init_special_inode(inode, inode->i_mode | S_IFIFO, 0);
1201 			break;
1202 		}
1203 		case ICBTAG_FILE_TYPE_SOCKET:
1204 		{
1205 			init_special_inode(inode, inode->i_mode | S_IFSOCK, 0);
1206 			break;
1207 		}
1208 		case ICBTAG_FILE_TYPE_SYMLINK:
1209 		{
1210 			inode->i_data.a_ops = &udf_symlink_aops;
1211 			inode->i_op = &page_symlink_inode_operations;
1212 			inode->i_mode = S_IFLNK|S_IRWXUGO;
1213 			break;
1214 		}
1215 		default:
1216 		{
1217 			printk(KERN_ERR "udf: udf_fill_inode(ino %ld) failed unknown file type=%d\n",
1218 				inode->i_ino, fe->icbTag.fileType);
1219 			make_bad_inode(inode);
1220 			return;
1221 		}
1222 	}
1223 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1224 	{
1225 		struct deviceSpec *dsea =
1226 			(struct deviceSpec *)
1227 				udf_get_extendedattr(inode, 12, 1);
1228 
1229 		if (dsea)
1230 		{
1231 			init_special_inode(inode, inode->i_mode, MKDEV(
1232 				le32_to_cpu(dsea->majorDeviceIdent),
1233 				le32_to_cpu(dsea->minorDeviceIdent)));
1234 			/* Developer ID ??? */
1235 		}
1236 		else
1237 		{
1238 			make_bad_inode(inode);
1239 		}
1240 	}
1241 }
1242 
1243 static mode_t
1244 udf_convert_permissions(struct fileEntry *fe)
1245 {
1246 	mode_t mode;
1247 	uint32_t permissions;
1248 	uint32_t flags;
1249 
1250 	permissions = le32_to_cpu(fe->permissions);
1251 	flags = le16_to_cpu(fe->icbTag.flags);
1252 
1253 	mode =	(( permissions      ) & S_IRWXO) |
1254 		(( permissions >> 2 ) & S_IRWXG) |
1255 		(( permissions >> 4 ) & S_IRWXU) |
1256 		(( flags & ICBTAG_FLAG_SETUID) ? S_ISUID : 0) |
1257 		(( flags & ICBTAG_FLAG_SETGID) ? S_ISGID : 0) |
1258 		(( flags & ICBTAG_FLAG_STICKY) ? S_ISVTX : 0);
1259 
1260 	return mode;
1261 }
1262 
1263 /*
1264  * udf_write_inode
1265  *
1266  * PURPOSE
1267  *	Write out the specified inode.
1268  *
1269  * DESCRIPTION
1270  *	This routine is called whenever an inode is synced.
1271  *	Currently this routine is just a placeholder.
1272  *
1273  * HISTORY
1274  *	July 1, 1997 - Andrew E. Mileski
1275  *	Written, tested, and released.
1276  */
1277 
1278 int udf_write_inode(struct inode * inode, int sync)
1279 {
1280 	int ret;
1281 	lock_kernel();
1282 	ret = udf_update_inode(inode, sync);
1283 	unlock_kernel();
1284 	return ret;
1285 }
1286 
1287 int udf_sync_inode(struct inode * inode)
1288 {
1289 	return udf_update_inode(inode, 1);
1290 }
1291 
1292 static int
1293 udf_update_inode(struct inode *inode, int do_sync)
1294 {
1295 	struct buffer_head *bh = NULL;
1296 	struct fileEntry *fe;
1297 	struct extendedFileEntry *efe;
1298 	uint32_t udfperms;
1299 	uint16_t icbflags;
1300 	uint16_t crclen;
1301 	int i;
1302 	kernel_timestamp cpu_time;
1303 	int err = 0;
1304 
1305 	bh = udf_tread(inode->i_sb,
1306 		udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0));
1307 
1308 	if (!bh)
1309 	{
1310 		udf_debug("bread failure\n");
1311 		return -EIO;
1312 	}
1313 
1314 	memset(bh->b_data, 0x00, inode->i_sb->s_blocksize);
1315 
1316 	fe = (struct fileEntry *)bh->b_data;
1317 	efe = (struct extendedFileEntry *)bh->b_data;
1318 
1319 	if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_USE)
1320 	{
1321 		struct unallocSpaceEntry *use =
1322 			(struct unallocSpaceEntry *)bh->b_data;
1323 
1324 		use->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1325 		memcpy(bh->b_data + sizeof(struct unallocSpaceEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry));
1326 		crclen = sizeof(struct unallocSpaceEntry) + UDF_I_LENALLOC(inode) -
1327 			sizeof(tag);
1328 		use->descTag.tagLocation = cpu_to_le32(UDF_I_LOCATION(inode).logicalBlockNum);
1329 		use->descTag.descCRCLength = cpu_to_le16(crclen);
1330 		use->descTag.descCRC = cpu_to_le16(udf_crc((char *)use + sizeof(tag), crclen, 0));
1331 
1332 		use->descTag.tagChecksum = 0;
1333 		for (i=0; i<16; i++)
1334 			if (i != 4)
1335 				use->descTag.tagChecksum += ((uint8_t *)&(use->descTag))[i];
1336 
1337 		mark_buffer_dirty(bh);
1338 		udf_release_data(bh);
1339 		return err;
1340 	}
1341 
1342 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET))
1343 		fe->uid = cpu_to_le32(-1);
1344 	else if (inode->i_uid != UDF_SB(inode->i_sb)->s_uid)
1345 		fe->uid = cpu_to_le32(inode->i_uid);
1346 
1347 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET))
1348 		fe->gid = cpu_to_le32(-1);
1349 	else if (inode->i_gid != UDF_SB(inode->i_sb)->s_gid)
1350 		fe->gid = cpu_to_le32(inode->i_gid);
1351 
1352 	udfperms =	((inode->i_mode & S_IRWXO)     ) |
1353 			((inode->i_mode & S_IRWXG) << 2) |
1354 			((inode->i_mode & S_IRWXU) << 4);
1355 
1356 	udfperms |=	(le32_to_cpu(fe->permissions) &
1357 			(FE_PERM_O_DELETE | FE_PERM_O_CHATTR |
1358 			 FE_PERM_G_DELETE | FE_PERM_G_CHATTR |
1359 			 FE_PERM_U_DELETE | FE_PERM_U_CHATTR));
1360 	fe->permissions = cpu_to_le32(udfperms);
1361 
1362 	if (S_ISDIR(inode->i_mode))
1363 		fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1);
1364 	else
1365 		fe->fileLinkCount = cpu_to_le16(inode->i_nlink);
1366 
1367 	fe->informationLength = cpu_to_le64(inode->i_size);
1368 
1369 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1370 	{
1371 		regid *eid;
1372 		struct deviceSpec *dsea =
1373 			(struct deviceSpec *)
1374 				udf_get_extendedattr(inode, 12, 1);
1375 
1376 		if (!dsea)
1377 		{
1378 			dsea = (struct deviceSpec *)
1379 				udf_add_extendedattr(inode,
1380 					sizeof(struct deviceSpec) +
1381 					sizeof(regid), 12, 0x3);
1382 			dsea->attrType = cpu_to_le32(12);
1383 			dsea->attrSubtype = 1;
1384 			dsea->attrLength = cpu_to_le32(sizeof(struct deviceSpec) +
1385 				sizeof(regid));
1386 			dsea->impUseLength = cpu_to_le32(sizeof(regid));
1387 		}
1388 		eid = (regid *)dsea->impUse;
1389 		memset(eid, 0, sizeof(regid));
1390 		strcpy(eid->ident, UDF_ID_DEVELOPER);
1391 		eid->identSuffix[0] = UDF_OS_CLASS_UNIX;
1392 		eid->identSuffix[1] = UDF_OS_ID_LINUX;
1393 		dsea->majorDeviceIdent = cpu_to_le32(imajor(inode));
1394 		dsea->minorDeviceIdent = cpu_to_le32(iminor(inode));
1395 	}
1396 
1397 	if (UDF_I_EFE(inode) == 0)
1398 	{
1399 		memcpy(bh->b_data + sizeof(struct fileEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct fileEntry));
1400 		fe->logicalBlocksRecorded = cpu_to_le64(
1401 			(inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >>
1402 			(inode->i_sb->s_blocksize_bits - 9));
1403 
1404 		if (udf_time_to_stamp(&cpu_time, inode->i_atime))
1405 			fe->accessTime = cpu_to_lets(cpu_time);
1406 		if (udf_time_to_stamp(&cpu_time, inode->i_mtime))
1407 			fe->modificationTime = cpu_to_lets(cpu_time);
1408 		if (udf_time_to_stamp(&cpu_time, inode->i_ctime))
1409 			fe->attrTime = cpu_to_lets(cpu_time);
1410 		memset(&(fe->impIdent), 0, sizeof(regid));
1411 		strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER);
1412 		fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1413 		fe->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
1414 		fe->uniqueID = cpu_to_le64(UDF_I_UNIQUE(inode));
1415 		fe->lengthExtendedAttr = cpu_to_le32(UDF_I_LENEATTR(inode));
1416 		fe->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1417 		fe->descTag.tagIdent = cpu_to_le16(TAG_IDENT_FE);
1418 		crclen = sizeof(struct fileEntry);
1419 	}
1420 	else
1421 	{
1422 		memcpy(bh->b_data + sizeof(struct extendedFileEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry));
1423 		efe->objectSize = cpu_to_le64(inode->i_size);
1424 		efe->logicalBlocksRecorded = cpu_to_le64(
1425 			(inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >>
1426 			(inode->i_sb->s_blocksize_bits - 9));
1427 
1428 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_atime.tv_sec ||
1429 			(UDF_I_CRTIME(inode).tv_sec == inode->i_atime.tv_sec &&
1430 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_atime.tv_nsec))
1431 		{
1432 			UDF_I_CRTIME(inode) = inode->i_atime;
1433 		}
1434 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_mtime.tv_sec ||
1435 			(UDF_I_CRTIME(inode).tv_sec == inode->i_mtime.tv_sec &&
1436 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_mtime.tv_nsec))
1437 		{
1438 			UDF_I_CRTIME(inode) = inode->i_mtime;
1439 		}
1440 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_ctime.tv_sec ||
1441 			(UDF_I_CRTIME(inode).tv_sec == inode->i_ctime.tv_sec &&
1442 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_ctime.tv_nsec))
1443 		{
1444 			UDF_I_CRTIME(inode) = inode->i_ctime;
1445 		}
1446 
1447 		if (udf_time_to_stamp(&cpu_time, inode->i_atime))
1448 			efe->accessTime = cpu_to_lets(cpu_time);
1449 		if (udf_time_to_stamp(&cpu_time, inode->i_mtime))
1450 			efe->modificationTime = cpu_to_lets(cpu_time);
1451 		if (udf_time_to_stamp(&cpu_time, UDF_I_CRTIME(inode)))
1452 			efe->createTime = cpu_to_lets(cpu_time);
1453 		if (udf_time_to_stamp(&cpu_time, inode->i_ctime))
1454 			efe->attrTime = cpu_to_lets(cpu_time);
1455 
1456 		memset(&(efe->impIdent), 0, sizeof(regid));
1457 		strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER);
1458 		efe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1459 		efe->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
1460 		efe->uniqueID = cpu_to_le64(UDF_I_UNIQUE(inode));
1461 		efe->lengthExtendedAttr = cpu_to_le32(UDF_I_LENEATTR(inode));
1462 		efe->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1463 		efe->descTag.tagIdent = cpu_to_le16(TAG_IDENT_EFE);
1464 		crclen = sizeof(struct extendedFileEntry);
1465 	}
1466 	if (UDF_I_STRAT4096(inode))
1467 	{
1468 		fe->icbTag.strategyType = cpu_to_le16(4096);
1469 		fe->icbTag.strategyParameter = cpu_to_le16(1);
1470 		fe->icbTag.numEntries = cpu_to_le16(2);
1471 	}
1472 	else
1473 	{
1474 		fe->icbTag.strategyType = cpu_to_le16(4);
1475 		fe->icbTag.numEntries = cpu_to_le16(1);
1476 	}
1477 
1478 	if (S_ISDIR(inode->i_mode))
1479 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_DIRECTORY;
1480 	else if (S_ISREG(inode->i_mode))
1481 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_REGULAR;
1482 	else if (S_ISLNK(inode->i_mode))
1483 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_SYMLINK;
1484 	else if (S_ISBLK(inode->i_mode))
1485 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_BLOCK;
1486 	else if (S_ISCHR(inode->i_mode))
1487 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_CHAR;
1488 	else if (S_ISFIFO(inode->i_mode))
1489 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_FIFO;
1490 	else if (S_ISSOCK(inode->i_mode))
1491 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_SOCKET;
1492 
1493 	icbflags =	UDF_I_ALLOCTYPE(inode) |
1494 			((inode->i_mode & S_ISUID) ? ICBTAG_FLAG_SETUID : 0) |
1495 			((inode->i_mode & S_ISGID) ? ICBTAG_FLAG_SETGID : 0) |
1496 			((inode->i_mode & S_ISVTX) ? ICBTAG_FLAG_STICKY : 0) |
1497 			(le16_to_cpu(fe->icbTag.flags) &
1498 				~(ICBTAG_FLAG_AD_MASK | ICBTAG_FLAG_SETUID |
1499 				ICBTAG_FLAG_SETGID | ICBTAG_FLAG_STICKY));
1500 
1501 	fe->icbTag.flags = cpu_to_le16(icbflags);
1502 	if (UDF_SB_UDFREV(inode->i_sb) >= 0x0200)
1503 		fe->descTag.descVersion = cpu_to_le16(3);
1504 	else
1505 		fe->descTag.descVersion = cpu_to_le16(2);
1506 	fe->descTag.tagSerialNum = cpu_to_le16(UDF_SB_SERIALNUM(inode->i_sb));
1507 	fe->descTag.tagLocation = cpu_to_le32(UDF_I_LOCATION(inode).logicalBlockNum);
1508 	crclen += UDF_I_LENEATTR(inode) + UDF_I_LENALLOC(inode) - sizeof(tag);
1509 	fe->descTag.descCRCLength = cpu_to_le16(crclen);
1510 	fe->descTag.descCRC = cpu_to_le16(udf_crc((char *)fe + sizeof(tag), crclen, 0));
1511 
1512 	fe->descTag.tagChecksum = 0;
1513 	for (i=0; i<16; i++)
1514 		if (i != 4)
1515 			fe->descTag.tagChecksum += ((uint8_t *)&(fe->descTag))[i];
1516 
1517 	/* write the data blocks */
1518 	mark_buffer_dirty(bh);
1519 	if (do_sync)
1520 	{
1521 		sync_dirty_buffer(bh);
1522 		if (buffer_req(bh) && !buffer_uptodate(bh))
1523 		{
1524 			printk("IO error syncing udf inode [%s:%08lx]\n",
1525 				inode->i_sb->s_id, inode->i_ino);
1526 			err = -EIO;
1527 		}
1528 	}
1529 	udf_release_data(bh);
1530 	return err;
1531 }
1532 
1533 struct inode *
1534 udf_iget(struct super_block *sb, kernel_lb_addr ino)
1535 {
1536 	unsigned long block = udf_get_lb_pblock(sb, ino, 0);
1537 	struct inode *inode = iget_locked(sb, block);
1538 
1539 	if (!inode)
1540 		return NULL;
1541 
1542 	if (inode->i_state & I_NEW) {
1543 		memcpy(&UDF_I_LOCATION(inode), &ino, sizeof(kernel_lb_addr));
1544 		__udf_read_inode(inode);
1545 		unlock_new_inode(inode);
1546 	}
1547 
1548 	if (is_bad_inode(inode))
1549 		goto out_iput;
1550 
1551 	if (ino.logicalBlockNum >= UDF_SB_PARTLEN(sb, ino.partitionReferenceNum)) {
1552 		udf_debug("block=%d, partition=%d out of range\n",
1553 			ino.logicalBlockNum, ino.partitionReferenceNum);
1554 		make_bad_inode(inode);
1555 		goto out_iput;
1556 	}
1557 
1558 	return inode;
1559 
1560  out_iput:
1561 	iput(inode);
1562 	return NULL;
1563 }
1564 
1565 int8_t udf_add_aext(struct inode *inode, kernel_lb_addr *bloc, int *extoffset,
1566 	kernel_lb_addr eloc, uint32_t elen, struct buffer_head **bh, int inc)
1567 {
1568 	int adsize;
1569 	short_ad *sad = NULL;
1570 	long_ad *lad = NULL;
1571 	struct allocExtDesc *aed;
1572 	int8_t etype;
1573 	uint8_t *ptr;
1574 
1575 	if (!*bh)
1576 		ptr = UDF_I_DATA(inode) + *extoffset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1577 	else
1578 		ptr = (*bh)->b_data + *extoffset;
1579 
1580 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
1581 		adsize = sizeof(short_ad);
1582 	else if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_LONG)
1583 		adsize = sizeof(long_ad);
1584 	else
1585 		return -1;
1586 
1587 	if (*extoffset + (2 * adsize) > inode->i_sb->s_blocksize)
1588 	{
1589 		char *sptr, *dptr;
1590 		struct buffer_head *nbh;
1591 		int err, loffset;
1592 		kernel_lb_addr obloc = *bloc;
1593 
1594 		if (!(bloc->logicalBlockNum = udf_new_block(inode->i_sb, NULL,
1595 			obloc.partitionReferenceNum, obloc.logicalBlockNum, &err)))
1596 		{
1597 			return -1;
1598 		}
1599 		if (!(nbh = udf_tgetblk(inode->i_sb, udf_get_lb_pblock(inode->i_sb,
1600 			*bloc, 0))))
1601 		{
1602 			return -1;
1603 		}
1604 		lock_buffer(nbh);
1605 		memset(nbh->b_data, 0x00, inode->i_sb->s_blocksize);
1606 		set_buffer_uptodate(nbh);
1607 		unlock_buffer(nbh);
1608 		mark_buffer_dirty_inode(nbh, inode);
1609 
1610 		aed = (struct allocExtDesc *)(nbh->b_data);
1611 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT))
1612 			aed->previousAllocExtLocation = cpu_to_le32(obloc.logicalBlockNum);
1613 		if (*extoffset + adsize > inode->i_sb->s_blocksize)
1614 		{
1615 			loffset = *extoffset;
1616 			aed->lengthAllocDescs = cpu_to_le32(adsize);
1617 			sptr = ptr - adsize;
1618 			dptr = nbh->b_data + sizeof(struct allocExtDesc);
1619 			memcpy(dptr, sptr, adsize);
1620 			*extoffset = sizeof(struct allocExtDesc) + adsize;
1621 		}
1622 		else
1623 		{
1624 			loffset = *extoffset + adsize;
1625 			aed->lengthAllocDescs = cpu_to_le32(0);
1626 			sptr = ptr;
1627 			*extoffset = sizeof(struct allocExtDesc);
1628 
1629 			if (*bh)
1630 			{
1631 				aed = (struct allocExtDesc *)(*bh)->b_data;
1632 				aed->lengthAllocDescs =
1633 					cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) + adsize);
1634 			}
1635 			else
1636 			{
1637 				UDF_I_LENALLOC(inode) += adsize;
1638 				mark_inode_dirty(inode);
1639 			}
1640 		}
1641 		if (UDF_SB_UDFREV(inode->i_sb) >= 0x0200)
1642 			udf_new_tag(nbh->b_data, TAG_IDENT_AED, 3, 1,
1643 				bloc->logicalBlockNum, sizeof(tag));
1644 		else
1645 			udf_new_tag(nbh->b_data, TAG_IDENT_AED, 2, 1,
1646 				bloc->logicalBlockNum, sizeof(tag));
1647 		switch (UDF_I_ALLOCTYPE(inode))
1648 		{
1649 			case ICBTAG_FLAG_AD_SHORT:
1650 			{
1651 				sad = (short_ad *)sptr;
1652 				sad->extLength = cpu_to_le32(
1653 					EXT_NEXT_EXTENT_ALLOCDECS |
1654 					inode->i_sb->s_blocksize);
1655 				sad->extPosition = cpu_to_le32(bloc->logicalBlockNum);
1656 				break;
1657 			}
1658 			case ICBTAG_FLAG_AD_LONG:
1659 			{
1660 				lad = (long_ad *)sptr;
1661 				lad->extLength = cpu_to_le32(
1662 					EXT_NEXT_EXTENT_ALLOCDECS |
1663 					inode->i_sb->s_blocksize);
1664 				lad->extLocation = cpu_to_lelb(*bloc);
1665 				memset(lad->impUse, 0x00, sizeof(lad->impUse));
1666 				break;
1667 			}
1668 		}
1669 		if (*bh)
1670 		{
1671 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1672 				udf_update_tag((*bh)->b_data, loffset);
1673 			else
1674 				udf_update_tag((*bh)->b_data, sizeof(struct allocExtDesc));
1675 			mark_buffer_dirty_inode(*bh, inode);
1676 			udf_release_data(*bh);
1677 		}
1678 		else
1679 			mark_inode_dirty(inode);
1680 		*bh = nbh;
1681 	}
1682 
1683 	etype = udf_write_aext(inode, *bloc, extoffset, eloc, elen, *bh, inc);
1684 
1685 	if (!*bh)
1686 	{
1687 		UDF_I_LENALLOC(inode) += adsize;
1688 		mark_inode_dirty(inode);
1689 	}
1690 	else
1691 	{
1692 		aed = (struct allocExtDesc *)(*bh)->b_data;
1693 		aed->lengthAllocDescs =
1694 			cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) + adsize);
1695 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1696 			udf_update_tag((*bh)->b_data, *extoffset + (inc ? 0 : adsize));
1697 		else
1698 			udf_update_tag((*bh)->b_data, sizeof(struct allocExtDesc));
1699 		mark_buffer_dirty_inode(*bh, inode);
1700 	}
1701 
1702 	return etype;
1703 }
1704 
1705 int8_t udf_write_aext(struct inode *inode, kernel_lb_addr bloc, int *extoffset,
1706     kernel_lb_addr eloc, uint32_t elen, struct buffer_head *bh, int inc)
1707 {
1708 	int adsize;
1709 	uint8_t *ptr;
1710 
1711 	if (!bh)
1712 		ptr = UDF_I_DATA(inode) + *extoffset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1713 	else
1714 	{
1715 		ptr = bh->b_data + *extoffset;
1716 		atomic_inc(&bh->b_count);
1717 	}
1718 
1719 	switch (UDF_I_ALLOCTYPE(inode))
1720 	{
1721 		case ICBTAG_FLAG_AD_SHORT:
1722 		{
1723 			short_ad *sad = (short_ad *)ptr;
1724 			sad->extLength = cpu_to_le32(elen);
1725 			sad->extPosition = cpu_to_le32(eloc.logicalBlockNum);
1726 			adsize = sizeof(short_ad);
1727 			break;
1728 		}
1729 		case ICBTAG_FLAG_AD_LONG:
1730 		{
1731 			long_ad *lad = (long_ad *)ptr;
1732 			lad->extLength = cpu_to_le32(elen);
1733 			lad->extLocation = cpu_to_lelb(eloc);
1734 			memset(lad->impUse, 0x00, sizeof(lad->impUse));
1735 			adsize = sizeof(long_ad);
1736 			break;
1737 		}
1738 		default:
1739 			return -1;
1740 	}
1741 
1742 	if (bh)
1743 	{
1744 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1745 		{
1746 			struct allocExtDesc *aed = (struct allocExtDesc *)(bh)->b_data;
1747 			udf_update_tag((bh)->b_data,
1748 				le32_to_cpu(aed->lengthAllocDescs) + sizeof(struct allocExtDesc));
1749 		}
1750 		mark_buffer_dirty_inode(bh, inode);
1751 		udf_release_data(bh);
1752 	}
1753 	else
1754 		mark_inode_dirty(inode);
1755 
1756 	if (inc)
1757 		*extoffset += adsize;
1758 	return (elen >> 30);
1759 }
1760 
1761 int8_t udf_next_aext(struct inode *inode, kernel_lb_addr *bloc, int *extoffset,
1762 	kernel_lb_addr *eloc, uint32_t *elen, struct buffer_head **bh, int inc)
1763 {
1764 	int8_t etype;
1765 
1766 	while ((etype = udf_current_aext(inode, bloc, extoffset, eloc, elen, bh, inc)) ==
1767 		(EXT_NEXT_EXTENT_ALLOCDECS >> 30))
1768 	{
1769 		*bloc = *eloc;
1770 		*extoffset = sizeof(struct allocExtDesc);
1771 		udf_release_data(*bh);
1772 		if (!(*bh = udf_tread(inode->i_sb, udf_get_lb_pblock(inode->i_sb, *bloc, 0))))
1773 		{
1774 			udf_debug("reading block %d failed!\n",
1775 				udf_get_lb_pblock(inode->i_sb, *bloc, 0));
1776 			return -1;
1777 		}
1778 	}
1779 
1780 	return etype;
1781 }
1782 
1783 int8_t udf_current_aext(struct inode *inode, kernel_lb_addr *bloc, int *extoffset,
1784 	kernel_lb_addr *eloc, uint32_t *elen, struct buffer_head **bh, int inc)
1785 {
1786 	int alen;
1787 	int8_t etype;
1788 	uint8_t *ptr;
1789 
1790 	if (!*bh)
1791 	{
1792 		if (!(*extoffset))
1793 			*extoffset = udf_file_entry_alloc_offset(inode);
1794 		ptr = UDF_I_DATA(inode) + *extoffset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1795 		alen = udf_file_entry_alloc_offset(inode) + UDF_I_LENALLOC(inode);
1796 	}
1797 	else
1798 	{
1799 		if (!(*extoffset))
1800 			*extoffset = sizeof(struct allocExtDesc);
1801 		ptr = (*bh)->b_data + *extoffset;
1802 		alen = sizeof(struct allocExtDesc) + le32_to_cpu(((struct allocExtDesc *)(*bh)->b_data)->lengthAllocDescs);
1803 	}
1804 
1805 	switch (UDF_I_ALLOCTYPE(inode))
1806 	{
1807 		case ICBTAG_FLAG_AD_SHORT:
1808 		{
1809 			short_ad *sad;
1810 
1811 			if (!(sad = udf_get_fileshortad(ptr, alen, extoffset, inc)))
1812 				return -1;
1813 
1814 			etype = le32_to_cpu(sad->extLength) >> 30;
1815 			eloc->logicalBlockNum = le32_to_cpu(sad->extPosition);
1816 			eloc->partitionReferenceNum = UDF_I_LOCATION(inode).partitionReferenceNum;
1817 			*elen = le32_to_cpu(sad->extLength) & UDF_EXTENT_LENGTH_MASK;
1818 			break;
1819 		}
1820 		case ICBTAG_FLAG_AD_LONG:
1821 		{
1822 			long_ad *lad;
1823 
1824 			if (!(lad = udf_get_filelongad(ptr, alen, extoffset, inc)))
1825 				return -1;
1826 
1827 			etype = le32_to_cpu(lad->extLength) >> 30;
1828 			*eloc = lelb_to_cpu(lad->extLocation);
1829 			*elen = le32_to_cpu(lad->extLength) & UDF_EXTENT_LENGTH_MASK;
1830 			break;
1831 		}
1832 		default:
1833 		{
1834 			udf_debug("alloc_type = %d unsupported\n", UDF_I_ALLOCTYPE(inode));
1835 			return -1;
1836 		}
1837 	}
1838 
1839 	return etype;
1840 }
1841 
1842 static int8_t
1843 udf_insert_aext(struct inode *inode, kernel_lb_addr bloc, int extoffset,
1844 		kernel_lb_addr neloc, uint32_t nelen, struct buffer_head *bh)
1845 {
1846 	kernel_lb_addr oeloc;
1847 	uint32_t oelen;
1848 	int8_t etype;
1849 
1850 	if (bh)
1851 		atomic_inc(&bh->b_count);
1852 
1853 	while ((etype = udf_next_aext(inode, &bloc, &extoffset, &oeloc, &oelen, &bh, 0)) != -1)
1854 	{
1855 		udf_write_aext(inode, bloc, &extoffset, neloc, nelen, bh, 1);
1856 
1857 		neloc = oeloc;
1858 		nelen = (etype << 30) | oelen;
1859 	}
1860 	udf_add_aext(inode, &bloc, &extoffset, neloc, nelen, &bh, 1);
1861 	udf_release_data(bh);
1862 	return (nelen >> 30);
1863 }
1864 
1865 int8_t udf_delete_aext(struct inode *inode, kernel_lb_addr nbloc, int nextoffset,
1866 	kernel_lb_addr eloc, uint32_t elen, struct buffer_head *nbh)
1867 {
1868 	struct buffer_head *obh;
1869 	kernel_lb_addr obloc;
1870 	int oextoffset, adsize;
1871 	int8_t etype;
1872 	struct allocExtDesc *aed;
1873 
1874 	if (nbh)
1875 	{
1876 		atomic_inc(&nbh->b_count);
1877 		atomic_inc(&nbh->b_count);
1878 	}
1879 
1880 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
1881 		adsize = sizeof(short_ad);
1882 	else if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_LONG)
1883 		adsize = sizeof(long_ad);
1884 	else
1885 		adsize = 0;
1886 
1887 	obh = nbh;
1888 	obloc = nbloc;
1889 	oextoffset = nextoffset;
1890 
1891 	if (udf_next_aext(inode, &nbloc, &nextoffset, &eloc, &elen, &nbh, 1) == -1)
1892 		return -1;
1893 
1894 	while ((etype = udf_next_aext(inode, &nbloc, &nextoffset, &eloc, &elen, &nbh, 1)) != -1)
1895 	{
1896 		udf_write_aext(inode, obloc, &oextoffset, eloc, (etype << 30) | elen, obh, 1);
1897 		if (obh != nbh)
1898 		{
1899 			obloc = nbloc;
1900 			udf_release_data(obh);
1901 			atomic_inc(&nbh->b_count);
1902 			obh = nbh;
1903 			oextoffset = nextoffset - adsize;
1904 		}
1905 	}
1906 	memset(&eloc, 0x00, sizeof(kernel_lb_addr));
1907 	elen = 0;
1908 
1909 	if (nbh != obh)
1910 	{
1911 		udf_free_blocks(inode->i_sb, inode, nbloc, 0, 1);
1912 		udf_write_aext(inode, obloc, &oextoffset, eloc, elen, obh, 1);
1913 		udf_write_aext(inode, obloc, &oextoffset, eloc, elen, obh, 1);
1914 		if (!obh)
1915 		{
1916 			UDF_I_LENALLOC(inode) -= (adsize * 2);
1917 			mark_inode_dirty(inode);
1918 		}
1919 		else
1920 		{
1921 			aed = (struct allocExtDesc *)(obh)->b_data;
1922 			aed->lengthAllocDescs =
1923 				cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) - (2*adsize));
1924 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1925 				udf_update_tag((obh)->b_data, oextoffset - (2*adsize));
1926 			else
1927 				udf_update_tag((obh)->b_data, sizeof(struct allocExtDesc));
1928 			mark_buffer_dirty_inode(obh, inode);
1929 		}
1930 	}
1931 	else
1932 	{
1933 		udf_write_aext(inode, obloc, &oextoffset, eloc, elen, obh, 1);
1934 		if (!obh)
1935 		{
1936 			UDF_I_LENALLOC(inode) -= adsize;
1937 			mark_inode_dirty(inode);
1938 		}
1939 		else
1940 		{
1941 			aed = (struct allocExtDesc *)(obh)->b_data;
1942 			aed->lengthAllocDescs =
1943 				cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) - adsize);
1944 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1945 				udf_update_tag((obh)->b_data, oextoffset - adsize);
1946 			else
1947 				udf_update_tag((obh)->b_data, sizeof(struct allocExtDesc));
1948 			mark_buffer_dirty_inode(obh, inode);
1949 		}
1950 	}
1951 
1952 	udf_release_data(nbh);
1953 	udf_release_data(obh);
1954 	return (elen >> 30);
1955 }
1956 
1957 int8_t inode_bmap(struct inode *inode, int block, kernel_lb_addr *bloc, uint32_t *extoffset,
1958 	kernel_lb_addr *eloc, uint32_t *elen, uint32_t *offset, struct buffer_head **bh)
1959 {
1960 	uint64_t lbcount = 0, bcount = (uint64_t)block << inode->i_sb->s_blocksize_bits;
1961 	int8_t etype;
1962 
1963 	if (block < 0)
1964 	{
1965 		printk(KERN_ERR "udf: inode_bmap: block < 0\n");
1966 		return -1;
1967 	}
1968 
1969 	*extoffset = 0;
1970 	*elen = 0;
1971 	*bloc = UDF_I_LOCATION(inode);
1972 
1973 	do
1974 	{
1975 		if ((etype = udf_next_aext(inode, bloc, extoffset, eloc, elen, bh, 1)) == -1)
1976 		{
1977 			*offset = bcount - lbcount;
1978 			UDF_I_LENEXTENTS(inode) = lbcount;
1979 			return -1;
1980 		}
1981 		lbcount += *elen;
1982 	} while (lbcount <= bcount);
1983 
1984 	*offset = bcount + *elen - lbcount;
1985 
1986 	return etype;
1987 }
1988 
1989 long udf_block_map(struct inode *inode, long block)
1990 {
1991 	kernel_lb_addr eloc, bloc;
1992 	uint32_t offset, extoffset, elen;
1993 	struct buffer_head *bh = NULL;
1994 	int ret;
1995 
1996 	lock_kernel();
1997 
1998 	if (inode_bmap(inode, block, &bloc, &extoffset, &eloc, &elen, &offset, &bh) == (EXT_RECORDED_ALLOCATED >> 30))
1999 		ret = udf_get_lb_pblock(inode->i_sb, eloc, offset >> inode->i_sb->s_blocksize_bits);
2000 	else
2001 		ret = 0;
2002 
2003 	unlock_kernel();
2004 	udf_release_data(bh);
2005 
2006 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_VARCONV))
2007 		return udf_fixed_to_variable(ret);
2008 	else
2009 		return ret;
2010 }
2011