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