xref: /openbmc/linux/fs/udf/inode.c (revision 85d71244f02583886dc20a60df2d4657d42116b4)
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 *, sector_t, int *,
53 	long *, int *);
54 static int8_t udf_insert_aext(struct inode *, struct extent_position,
55 	kernel_lb_addr, uint32_t);
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 	struct extent_position *);
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 const 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 *dbh = NULL;
198 	kernel_lb_addr eloc;
199 	uint32_t elen;
200 	uint8_t alloctype;
201 	struct extent_position epos;
202 
203 	struct udf_fileident_bh sfibh, dfibh;
204 	loff_t f_pos = udf_ext0_offset(inode) >> 2;
205 	int size = (udf_ext0_offset(inode) + inode->i_size) >> 2;
206 	struct fileIdentDesc cfi, *sfi, *dfi;
207 
208 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))
209 		alloctype = ICBTAG_FLAG_AD_SHORT;
210 	else
211 		alloctype = ICBTAG_FLAG_AD_LONG;
212 
213 	if (!inode->i_size)
214 	{
215 		UDF_I_ALLOCTYPE(inode) = alloctype;
216 		mark_inode_dirty(inode);
217 		return NULL;
218 	}
219 
220 	/* alloc block, and copy data to it */
221 	*block = udf_new_block(inode->i_sb, inode,
222 		UDF_I_LOCATION(inode).partitionReferenceNum,
223 		UDF_I_LOCATION(inode).logicalBlockNum, err);
224 
225 	if (!(*block))
226 		return NULL;
227 	newblock = udf_get_pblock(inode->i_sb, *block,
228 		UDF_I_LOCATION(inode).partitionReferenceNum, 0);
229 	if (!newblock)
230 		return NULL;
231 	dbh = udf_tgetblk(inode->i_sb, newblock);
232 	if (!dbh)
233 		return NULL;
234 	lock_buffer(dbh);
235 	memset(dbh->b_data, 0x00, inode->i_sb->s_blocksize);
236 	set_buffer_uptodate(dbh);
237 	unlock_buffer(dbh);
238 	mark_buffer_dirty_inode(dbh, inode);
239 
240 	sfibh.soffset = sfibh.eoffset = (f_pos & ((inode->i_sb->s_blocksize - 1) >> 2)) << 2;
241 	sfibh.sbh = sfibh.ebh = NULL;
242 	dfibh.soffset = dfibh.eoffset = 0;
243 	dfibh.sbh = dfibh.ebh = dbh;
244 	while ( (f_pos < size) )
245 	{
246 		UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_IN_ICB;
247 		sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL, NULL, NULL, NULL);
248 		if (!sfi)
249 		{
250 			brelse(dbh);
251 			return NULL;
252 		}
253 		UDF_I_ALLOCTYPE(inode) = alloctype;
254 		sfi->descTag.tagLocation = cpu_to_le32(*block);
255 		dfibh.soffset = dfibh.eoffset;
256 		dfibh.eoffset += (sfibh.eoffset - sfibh.soffset);
257 		dfi = (struct fileIdentDesc *)(dbh->b_data + dfibh.soffset);
258 		if (udf_write_fi(inode, sfi, dfi, &dfibh, sfi->impUse,
259 			sfi->fileIdent + le16_to_cpu(sfi->lengthOfImpUse)))
260 		{
261 			UDF_I_ALLOCTYPE(inode) = ICBTAG_FLAG_AD_IN_ICB;
262 			brelse(dbh);
263 			return NULL;
264 		}
265 	}
266 	mark_buffer_dirty_inode(dbh, inode);
267 
268 	memset(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode), 0, UDF_I_LENALLOC(inode));
269 	UDF_I_LENALLOC(inode) = 0;
270 	eloc.logicalBlockNum = *block;
271 	eloc.partitionReferenceNum = UDF_I_LOCATION(inode).partitionReferenceNum;
272 	elen = inode->i_size;
273 	UDF_I_LENEXTENTS(inode) = elen;
274 	epos.bh = NULL;
275 	epos.block = UDF_I_LOCATION(inode);
276 	epos.offset = udf_file_entry_alloc_offset(inode);
277 	udf_add_aext(inode, &epos, eloc, elen, 0);
278 	/* UniqueID stuff */
279 
280 	brelse(epos.bh);
281 	mark_inode_dirty(inode);
282 	return dbh;
283 }
284 
285 static int udf_get_block(struct inode *inode, sector_t block, struct buffer_head *bh_result, int create)
286 {
287 	int err, new;
288 	struct buffer_head *bh;
289 	unsigned long phys;
290 
291 	if (!create)
292 	{
293 		phys = udf_block_map(inode, block);
294 		if (phys)
295 			map_bh(bh_result, inode->i_sb, phys);
296 		return 0;
297 	}
298 
299 	err = -EIO;
300 	new = 0;
301 	bh = NULL;
302 
303 	lock_kernel();
304 
305 	if (block < 0)
306 		goto abort_negative;
307 
308 	if (block == UDF_I_NEXT_ALLOC_BLOCK(inode) + 1)
309 	{
310 		UDF_I_NEXT_ALLOC_BLOCK(inode) ++;
311 		UDF_I_NEXT_ALLOC_GOAL(inode) ++;
312 	}
313 
314 	err = 0;
315 
316 	bh = inode_getblk(inode, block, &err, &phys, &new);
317 	BUG_ON(bh);
318 	if (err)
319 		goto abort;
320 	BUG_ON(!phys);
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 /* Extend the file by 'blocks' blocks, return the number of extents added */
360 int udf_extend_file(struct inode *inode, struct extent_position *last_pos,
361 	kernel_long_ad *last_ext, sector_t blocks)
362 {
363 	sector_t add;
364 	int count = 0, fake = !(last_ext->extLength & UDF_EXTENT_LENGTH_MASK);
365 	struct super_block *sb = inode->i_sb;
366 	kernel_lb_addr prealloc_loc = {0, 0};
367 	int prealloc_len = 0;
368 
369 	/* The previous extent is fake and we should not extend by anything
370 	 * - there's nothing to do... */
371 	if (!blocks && fake)
372 		return 0;
373 	/* Round the last extent up to a multiple of block size */
374 	if (last_ext->extLength & (sb->s_blocksize - 1)) {
375 		last_ext->extLength =
376 			(last_ext->extLength & UDF_EXTENT_FLAG_MASK) |
377 			(((last_ext->extLength & UDF_EXTENT_LENGTH_MASK) +
378 				sb->s_blocksize - 1) & ~(sb->s_blocksize - 1));
379 		UDF_I_LENEXTENTS(inode) =
380 			(UDF_I_LENEXTENTS(inode) + sb->s_blocksize - 1) &
381 				~(sb->s_blocksize - 1);
382 	}
383 	/* Last extent are just preallocated blocks? */
384 	if ((last_ext->extLength & UDF_EXTENT_FLAG_MASK) == EXT_NOT_RECORDED_ALLOCATED) {
385 		/* Save the extent so that we can reattach it to the end */
386 		prealloc_loc = last_ext->extLocation;
387 		prealloc_len = last_ext->extLength;
388 		/* Mark the extent as a hole */
389 		last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
390 			(last_ext->extLength & UDF_EXTENT_LENGTH_MASK);
391 		last_ext->extLocation.logicalBlockNum = 0;
392        		last_ext->extLocation.partitionReferenceNum = 0;
393 	}
394 	/* Can we merge with the previous extent? */
395 	if ((last_ext->extLength & UDF_EXTENT_FLAG_MASK) == EXT_NOT_RECORDED_NOT_ALLOCATED) {
396 		add = ((1<<30) - sb->s_blocksize - (last_ext->extLength &
397 			UDF_EXTENT_LENGTH_MASK)) >> sb->s_blocksize_bits;
398 		if (add > blocks)
399 			add = blocks;
400 		blocks -= add;
401 		last_ext->extLength += add << sb->s_blocksize_bits;
402 	}
403 
404 	if (fake) {
405 		udf_add_aext(inode, last_pos, last_ext->extLocation,
406 			last_ext->extLength, 1);
407 		count++;
408 	}
409 	else
410 		udf_write_aext(inode, last_pos, last_ext->extLocation, last_ext->extLength, 1);
411 	/* Managed to do everything necessary? */
412 	if (!blocks)
413 		goto out;
414 
415 	/* All further extents will be NOT_RECORDED_NOT_ALLOCATED */
416 	last_ext->extLocation.logicalBlockNum = 0;
417        	last_ext->extLocation.partitionReferenceNum = 0;
418 	add = (1 << (30-sb->s_blocksize_bits)) - 1;
419 	last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED | (add << sb->s_blocksize_bits);
420 	/* Create enough extents to cover the whole hole */
421 	while (blocks > add) {
422 		blocks -= add;
423 		if (udf_add_aext(inode, last_pos, last_ext->extLocation,
424 			last_ext->extLength, 1) == -1)
425 			return -1;
426 		count++;
427 	}
428 	if (blocks) {
429 		last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
430 			(blocks << sb->s_blocksize_bits);
431 		if (udf_add_aext(inode, last_pos, last_ext->extLocation,
432 			last_ext->extLength, 1) == -1)
433 			return -1;
434 		count++;
435 	}
436 out:
437 	/* Do we have some preallocated blocks saved? */
438 	if (prealloc_len) {
439 		if (udf_add_aext(inode, last_pos, prealloc_loc, prealloc_len, 1) == -1)
440 			return -1;
441 		last_ext->extLocation = prealloc_loc;
442 		last_ext->extLength = prealloc_len;
443 		count++;
444 	}
445 	/* last_pos should point to the last written extent... */
446 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
447 		last_pos->offset -= sizeof(short_ad);
448 	else if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_LONG)
449 		last_pos->offset -= sizeof(long_ad);
450 	else
451 		return -1;
452 	return count;
453 }
454 
455 static struct buffer_head * inode_getblk(struct inode * inode, sector_t block,
456 	int *err, long *phys, int *new)
457 {
458 	static sector_t last_block;
459 	struct buffer_head *result = NULL;
460 	kernel_long_ad laarr[EXTENT_MERGE_SIZE];
461 	struct extent_position prev_epos, cur_epos, next_epos;
462 	int count = 0, startnum = 0, endnum = 0;
463 	uint32_t elen = 0, tmpelen;
464 	kernel_lb_addr eloc, tmpeloc;
465 	int c = 1;
466 	loff_t lbcount = 0, b_off = 0;
467 	uint32_t newblocknum, newblock;
468 	sector_t offset = 0;
469 	int8_t etype;
470 	int goal = 0, pgoal = UDF_I_LOCATION(inode).logicalBlockNum;
471 	int lastblock = 0;
472 
473 	prev_epos.offset = udf_file_entry_alloc_offset(inode);
474 	prev_epos.block = UDF_I_LOCATION(inode);
475 	prev_epos.bh = NULL;
476 	cur_epos = next_epos = prev_epos;
477 	b_off = (loff_t)block << inode->i_sb->s_blocksize_bits;
478 
479 	/* find the extent which contains the block we are looking for.
480        alternate between laarr[0] and laarr[1] for locations of the
481        current extent, and the previous extent */
482 	do
483 	{
484 		if (prev_epos.bh != cur_epos.bh)
485 		{
486 			brelse(prev_epos.bh);
487 			get_bh(cur_epos.bh);
488 			prev_epos.bh = cur_epos.bh;
489 		}
490 		if (cur_epos.bh != next_epos.bh)
491 		{
492 			brelse(cur_epos.bh);
493 			get_bh(next_epos.bh);
494 			cur_epos.bh = next_epos.bh;
495 		}
496 
497 		lbcount += elen;
498 
499 		prev_epos.block = cur_epos.block;
500 		cur_epos.block = next_epos.block;
501 
502 		prev_epos.offset = cur_epos.offset;
503 		cur_epos.offset = next_epos.offset;
504 
505 		if ((etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 1)) == -1)
506 			break;
507 
508 		c = !c;
509 
510 		laarr[c].extLength = (etype << 30) | elen;
511 		laarr[c].extLocation = eloc;
512 
513 		if (etype != (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
514 			pgoal = eloc.logicalBlockNum +
515 				((elen + inode->i_sb->s_blocksize - 1) >>
516 				inode->i_sb->s_blocksize_bits);
517 
518 		count ++;
519 	} while (lbcount + elen <= b_off);
520 
521 	b_off -= lbcount;
522 	offset = b_off >> inode->i_sb->s_blocksize_bits;
523 	/*
524 	 * Move prev_epos and cur_epos into indirect extent if we are at
525 	 * the pointer to it
526 	 */
527 	udf_next_aext(inode, &prev_epos, &tmpeloc, &tmpelen, 0);
528 	udf_next_aext(inode, &cur_epos, &tmpeloc, &tmpelen, 0);
529 
530 	/* if the extent is allocated and recorded, return the block
531        if the extent is not a multiple of the blocksize, round up */
532 
533 	if (etype == (EXT_RECORDED_ALLOCATED >> 30))
534 	{
535 		if (elen & (inode->i_sb->s_blocksize - 1))
536 		{
537 			elen = EXT_RECORDED_ALLOCATED |
538 				((elen + inode->i_sb->s_blocksize - 1) &
539 				~(inode->i_sb->s_blocksize - 1));
540 			etype = udf_write_aext(inode, &cur_epos, eloc, elen, 1);
541 		}
542 		brelse(prev_epos.bh);
543 		brelse(cur_epos.bh);
544 		brelse(next_epos.bh);
545 		newblock = udf_get_lb_pblock(inode->i_sb, eloc, offset);
546 		*phys = newblock;
547 		return NULL;
548 	}
549 
550 	last_block = block;
551 	/* Are we beyond EOF? */
552 	if (etype == -1)
553 	{
554 		int ret;
555 
556 		if (count) {
557 			if (c)
558 				laarr[0] = laarr[1];
559 			startnum = 1;
560 		}
561 		else {
562 			/* Create a fake extent when there's not one */
563 			memset(&laarr[0].extLocation, 0x00, sizeof(kernel_lb_addr));
564 			laarr[0].extLength = EXT_NOT_RECORDED_NOT_ALLOCATED;
565 			/* Will udf_extend_file() create real extent from a fake one? */
566 			startnum = (offset > 0);
567 		}
568 		/* Create extents for the hole between EOF and offset */
569 		ret = udf_extend_file(inode, &prev_epos, laarr, offset);
570 		if (ret == -1) {
571 			brelse(prev_epos.bh);
572 			brelse(cur_epos.bh);
573 			brelse(next_epos.bh);
574 			/* We don't really know the error here so we just make
575 			 * something up */
576 			*err = -ENOSPC;
577 			return NULL;
578 		}
579 		c = 0;
580 		offset = 0;
581 		count += ret;
582 		/* We are not covered by a preallocated extent? */
583 		if ((laarr[0].extLength & UDF_EXTENT_FLAG_MASK) != EXT_NOT_RECORDED_ALLOCATED) {
584 			/* Is there any real extent? - otherwise we overwrite
585 			 * the fake one... */
586 			if (count)
587 				c = !c;
588 			laarr[c].extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
589 				inode->i_sb->s_blocksize;
590 			memset(&laarr[c].extLocation, 0x00, sizeof(kernel_lb_addr));
591 			count ++;
592 			endnum ++;
593 		}
594 		endnum = c+1;
595 		lastblock = 1;
596 	}
597 	else {
598 		endnum = startnum = ((count > 2) ? 2 : count);
599 
600 		/* if the current extent is in position 0, swap it with the previous */
601 		if (!c && count != 1)
602 		{
603 			laarr[2] = laarr[0];
604 			laarr[0] = laarr[1];
605 			laarr[1] = laarr[2];
606 			c = 1;
607 		}
608 
609 		/* if the current block is located in an extent, read the next extent */
610 		if ((etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 0)) != -1)
611 		{
612 			laarr[c+1].extLength = (etype << 30) | elen;
613 			laarr[c+1].extLocation = eloc;
614 			count ++;
615 			startnum ++;
616 			endnum ++;
617 		}
618 		else {
619 			lastblock = 1;
620 		}
621 	}
622 
623 	/* if the current extent is not recorded but allocated, get the
624 		block in the extent corresponding to the requested block */
625 	if ((laarr[c].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
626 		newblocknum = laarr[c].extLocation.logicalBlockNum + offset;
627 	else /* otherwise, allocate a new block */
628 	{
629 		if (UDF_I_NEXT_ALLOC_BLOCK(inode) == block)
630 			goal = UDF_I_NEXT_ALLOC_GOAL(inode);
631 
632 		if (!goal)
633 		{
634 			if (!(goal = pgoal))
635 				goal = UDF_I_LOCATION(inode).logicalBlockNum + 1;
636 		}
637 
638 		if (!(newblocknum = udf_new_block(inode->i_sb, inode,
639 			UDF_I_LOCATION(inode).partitionReferenceNum, goal, err)))
640 		{
641 			brelse(prev_epos.bh);
642 			*err = -ENOSPC;
643 			return NULL;
644 		}
645 		UDF_I_LENEXTENTS(inode) += inode->i_sb->s_blocksize;
646 	}
647 
648 	/* if the extent the requsted block is located in contains multiple blocks,
649        split the extent into at most three extents. blocks prior to requested
650        block, requested block, and blocks after requested block */
651 	udf_split_extents(inode, &c, offset, newblocknum, laarr, &endnum);
652 
653 #ifdef UDF_PREALLOCATE
654 	/* preallocate blocks */
655 	udf_prealloc_extents(inode, c, lastblock, laarr, &endnum);
656 #endif
657 
658 	/* merge any continuous blocks in laarr */
659 	udf_merge_extents(inode, laarr, &endnum);
660 
661 	/* write back the new extents, inserting new extents if the new number
662 	of extents is greater than the old number, and deleting extents if
663 	the new number of extents is less than the old number */
664 	udf_update_extents(inode, laarr, startnum, endnum, &prev_epos);
665 
666 	brelse(prev_epos.bh);
667 
668 	if (!(newblock = udf_get_pblock(inode->i_sb, newblocknum,
669 		UDF_I_LOCATION(inode).partitionReferenceNum, 0)))
670 	{
671 		return NULL;
672 	}
673 	*phys = newblock;
674 	*err = 0;
675 	*new = 1;
676 	UDF_I_NEXT_ALLOC_BLOCK(inode) = block;
677 	UDF_I_NEXT_ALLOC_GOAL(inode) = newblocknum;
678 	inode->i_ctime = current_fs_time(inode->i_sb);
679 
680 	if (IS_SYNC(inode))
681 		udf_sync_inode(inode);
682 	else
683 		mark_inode_dirty(inode);
684 	return result;
685 }
686 
687 static void udf_split_extents(struct inode *inode, int *c, int offset, int newblocknum,
688 	kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
689 {
690 	if ((laarr[*c].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30) ||
691 		(laarr[*c].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
692 	{
693 		int curr = *c;
694 		int blen = ((laarr[curr].extLength & UDF_EXTENT_LENGTH_MASK) +
695 			inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits;
696 		int8_t etype = (laarr[curr].extLength >> 30);
697 
698 		if (blen == 1)
699 			;
700 		else if (!offset || blen == offset + 1)
701 		{
702 			laarr[curr+2] = laarr[curr+1];
703 			laarr[curr+1] = laarr[curr];
704 		}
705 		else
706 		{
707 			laarr[curr+3] = laarr[curr+1];
708 			laarr[curr+2] = laarr[curr+1] = laarr[curr];
709 		}
710 
711 		if (offset)
712 		{
713 			if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30))
714 			{
715 				udf_free_blocks(inode->i_sb, inode, laarr[curr].extLocation, 0, offset);
716 				laarr[curr].extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
717 					(offset << inode->i_sb->s_blocksize_bits);
718 				laarr[curr].extLocation.logicalBlockNum = 0;
719 				laarr[curr].extLocation.partitionReferenceNum = 0;
720 			}
721 			else
722 				laarr[curr].extLength = (etype << 30) |
723 					(offset << inode->i_sb->s_blocksize_bits);
724 			curr ++;
725 			(*c) ++;
726 			(*endnum) ++;
727 		}
728 
729 		laarr[curr].extLocation.logicalBlockNum = newblocknum;
730 		if (etype == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
731 			laarr[curr].extLocation.partitionReferenceNum =
732 				UDF_I_LOCATION(inode).partitionReferenceNum;
733 		laarr[curr].extLength = EXT_RECORDED_ALLOCATED |
734 			inode->i_sb->s_blocksize;
735 		curr ++;
736 
737 		if (blen != offset + 1)
738 		{
739 			if (etype == (EXT_NOT_RECORDED_ALLOCATED >> 30))
740 				laarr[curr].extLocation.logicalBlockNum += (offset + 1);
741 			laarr[curr].extLength = (etype << 30) |
742 				((blen - (offset + 1)) << inode->i_sb->s_blocksize_bits);
743 			curr ++;
744 			(*endnum) ++;
745 		}
746 	}
747 }
748 
749 static void udf_prealloc_extents(struct inode *inode, int c, int lastblock,
750 	 kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
751 {
752 	int start, length = 0, currlength = 0, i;
753 
754 	if (*endnum >= (c+1))
755 	{
756 		if (!lastblock)
757 			return;
758 		else
759 			start = c;
760 	}
761 	else
762 	{
763 		if ((laarr[c+1].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
764 		{
765 			start = c+1;
766 			length = currlength = (((laarr[c+1].extLength & UDF_EXTENT_LENGTH_MASK) +
767 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
768 		}
769 		else
770 			start = c;
771 	}
772 
773 	for (i=start+1; i<=*endnum; i++)
774 	{
775 		if (i == *endnum)
776 		{
777 			if (lastblock)
778 				length += UDF_DEFAULT_PREALLOC_BLOCKS;
779 		}
780 		else if ((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30))
781 			length += (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
782 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
783 		else
784 			break;
785 	}
786 
787 	if (length)
788 	{
789 		int next = laarr[start].extLocation.logicalBlockNum +
790 			(((laarr[start].extLength & UDF_EXTENT_LENGTH_MASK) +
791 			inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
792 		int numalloc = udf_prealloc_blocks(inode->i_sb, inode,
793 			laarr[start].extLocation.partitionReferenceNum,
794 			next, (UDF_DEFAULT_PREALLOC_BLOCKS > length ? length :
795 				UDF_DEFAULT_PREALLOC_BLOCKS) - currlength);
796 
797 		if (numalloc)
798 		{
799 			if (start == (c+1))
800 				laarr[start].extLength +=
801 					(numalloc << inode->i_sb->s_blocksize_bits);
802 			else
803 			{
804 				memmove(&laarr[c+2], &laarr[c+1],
805 					sizeof(long_ad) * (*endnum - (c+1)));
806 				(*endnum) ++;
807 				laarr[c+1].extLocation.logicalBlockNum = next;
808 				laarr[c+1].extLocation.partitionReferenceNum =
809 					laarr[c].extLocation.partitionReferenceNum;
810 				laarr[c+1].extLength = EXT_NOT_RECORDED_ALLOCATED |
811 					(numalloc << inode->i_sb->s_blocksize_bits);
812 				start = c+1;
813 			}
814 
815 			for (i=start+1; numalloc && i<*endnum; i++)
816 			{
817 				int elen = ((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
818 					inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits;
819 
820 				if (elen > numalloc)
821 				{
822 					laarr[i].extLength -=
823 						(numalloc << inode->i_sb->s_blocksize_bits);
824 					numalloc = 0;
825 				}
826 				else
827 				{
828 					numalloc -= elen;
829 					if (*endnum > (i+1))
830 						memmove(&laarr[i], &laarr[i+1],
831 							sizeof(long_ad) * (*endnum - (i+1)));
832 					i --;
833 					(*endnum) --;
834 				}
835 			}
836 			UDF_I_LENEXTENTS(inode) += numalloc << inode->i_sb->s_blocksize_bits;
837 		}
838 	}
839 }
840 
841 static void udf_merge_extents(struct inode *inode,
842 	 kernel_long_ad laarr[EXTENT_MERGE_SIZE], int *endnum)
843 {
844 	int i;
845 
846 	for (i=0; i<(*endnum-1); i++)
847 	{
848 		if ((laarr[i].extLength >> 30) == (laarr[i+1].extLength >> 30))
849 		{
850 			if (((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)) ||
851 				((laarr[i+1].extLocation.logicalBlockNum - laarr[i].extLocation.logicalBlockNum) ==
852 				(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
853 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits)))
854 			{
855 				if (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
856 					(laarr[i+1].extLength & UDF_EXTENT_LENGTH_MASK) +
857 					inode->i_sb->s_blocksize - 1) & ~UDF_EXTENT_LENGTH_MASK)
858 				{
859 					laarr[i+1].extLength = (laarr[i+1].extLength -
860 						(laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
861 						UDF_EXTENT_LENGTH_MASK) & ~(inode->i_sb->s_blocksize-1);
862 					laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_FLAG_MASK) +
863 						(UDF_EXTENT_LENGTH_MASK + 1) - inode->i_sb->s_blocksize;
864 					laarr[i+1].extLocation.logicalBlockNum =
865 						laarr[i].extLocation.logicalBlockNum +
866 						((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) >>
867 							inode->i_sb->s_blocksize_bits);
868 				}
869 				else
870 				{
871 					laarr[i].extLength = laarr[i+1].extLength +
872 						(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
873 						inode->i_sb->s_blocksize - 1) & ~(inode->i_sb->s_blocksize-1));
874 					if (*endnum > (i+2))
875 						memmove(&laarr[i+1], &laarr[i+2],
876 							sizeof(long_ad) * (*endnum - (i+2)));
877 					i --;
878 					(*endnum) --;
879 				}
880 			}
881 		}
882 		else if (((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30)) &&
883 			((laarr[i+1].extLength >> 30) == (EXT_NOT_RECORDED_NOT_ALLOCATED >> 30)))
884 		{
885 			udf_free_blocks(inode->i_sb, inode, laarr[i].extLocation, 0,
886 				((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
887 				inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
888 			laarr[i].extLocation.logicalBlockNum = 0;
889 			laarr[i].extLocation.partitionReferenceNum = 0;
890 
891 			if (((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
892 				(laarr[i+1].extLength & UDF_EXTENT_LENGTH_MASK) +
893 				inode->i_sb->s_blocksize - 1) & ~UDF_EXTENT_LENGTH_MASK)
894 			{
895 				laarr[i+1].extLength = (laarr[i+1].extLength -
896 					(laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
897 					UDF_EXTENT_LENGTH_MASK) & ~(inode->i_sb->s_blocksize-1);
898 				laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_FLAG_MASK) +
899 					(UDF_EXTENT_LENGTH_MASK + 1) - inode->i_sb->s_blocksize;
900 			}
901 			else
902 			{
903 				laarr[i].extLength = laarr[i+1].extLength +
904 					(((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
905 					inode->i_sb->s_blocksize - 1) & ~(inode->i_sb->s_blocksize-1));
906 				if (*endnum > (i+2))
907 					memmove(&laarr[i+1], &laarr[i+2],
908 						sizeof(long_ad) * (*endnum - (i+2)));
909 				i --;
910 				(*endnum) --;
911 			}
912 		}
913 		else if ((laarr[i].extLength >> 30) == (EXT_NOT_RECORDED_ALLOCATED >> 30))
914 		{
915 			udf_free_blocks(inode->i_sb, inode, laarr[i].extLocation, 0,
916 				((laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) +
917 			       inode->i_sb->s_blocksize - 1) >> inode->i_sb->s_blocksize_bits);
918 			laarr[i].extLocation.logicalBlockNum = 0;
919 			laarr[i].extLocation.partitionReferenceNum = 0;
920 			laarr[i].extLength = (laarr[i].extLength & UDF_EXTENT_LENGTH_MASK) |
921 				EXT_NOT_RECORDED_NOT_ALLOCATED;
922 		}
923 	}
924 }
925 
926 static void udf_update_extents(struct inode *inode,
927 	kernel_long_ad laarr[EXTENT_MERGE_SIZE], int startnum, int endnum,
928 	struct extent_position *epos)
929 {
930 	int start = 0, i;
931 	kernel_lb_addr tmploc;
932 	uint32_t tmplen;
933 
934 	if (startnum > endnum)
935 	{
936 		for (i=0; i<(startnum-endnum); i++)
937 			udf_delete_aext(inode, *epos, laarr[i].extLocation,
938 				laarr[i].extLength);
939 	}
940 	else if (startnum < endnum)
941 	{
942 		for (i=0; i<(endnum-startnum); i++)
943 		{
944 			udf_insert_aext(inode, *epos, laarr[i].extLocation,
945 				laarr[i].extLength);
946 			udf_next_aext(inode, epos, &laarr[i].extLocation,
947 				&laarr[i].extLength, 1);
948 			start ++;
949 		}
950 	}
951 
952 	for (i=start; i<endnum; i++)
953 	{
954 		udf_next_aext(inode, epos, &tmploc, &tmplen, 0);
955 		udf_write_aext(inode, epos, laarr[i].extLocation,
956 			laarr[i].extLength, 1);
957 	}
958 }
959 
960 struct buffer_head * udf_bread(struct inode * inode, int block,
961 	int create, int * err)
962 {
963 	struct buffer_head * bh = NULL;
964 
965 	bh = udf_getblk(inode, block, create, err);
966 	if (!bh)
967 		return NULL;
968 
969 	if (buffer_uptodate(bh))
970 		return bh;
971 	ll_rw_block(READ, 1, &bh);
972 	wait_on_buffer(bh);
973 	if (buffer_uptodate(bh))
974 		return bh;
975 	brelse(bh);
976 	*err = -EIO;
977 	return NULL;
978 }
979 
980 void udf_truncate(struct inode * inode)
981 {
982 	int offset;
983 	int err;
984 
985 	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
986 			S_ISLNK(inode->i_mode)))
987 		return;
988 	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
989 		return;
990 
991 	lock_kernel();
992 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
993 	{
994 		if (inode->i_sb->s_blocksize < (udf_file_entry_alloc_offset(inode) +
995 			inode->i_size))
996 		{
997 			udf_expand_file_adinicb(inode, inode->i_size, &err);
998 			if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
999 			{
1000 				inode->i_size = UDF_I_LENALLOC(inode);
1001 				unlock_kernel();
1002 				return;
1003 			}
1004 			else
1005 				udf_truncate_extents(inode);
1006 		}
1007 		else
1008 		{
1009 			offset = inode->i_size & (inode->i_sb->s_blocksize - 1);
1010 			memset(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode) + offset, 0x00, inode->i_sb->s_blocksize - offset - udf_file_entry_alloc_offset(inode));
1011 			UDF_I_LENALLOC(inode) = inode->i_size;
1012 		}
1013 	}
1014 	else
1015 	{
1016 		block_truncate_page(inode->i_mapping, inode->i_size, udf_get_block);
1017 		udf_truncate_extents(inode);
1018 	}
1019 
1020 	inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb);
1021 	if (IS_SYNC(inode))
1022 		udf_sync_inode (inode);
1023 	else
1024 		mark_inode_dirty(inode);
1025 	unlock_kernel();
1026 }
1027 
1028 static void
1029 __udf_read_inode(struct inode *inode)
1030 {
1031 	struct buffer_head *bh = NULL;
1032 	struct fileEntry *fe;
1033 	uint16_t ident;
1034 
1035 	/*
1036 	 * Set defaults, but the inode is still incomplete!
1037 	 * Note: get_new_inode() sets the following on a new inode:
1038 	 *      i_sb = sb
1039 	 *      i_no = ino
1040 	 *      i_flags = sb->s_flags
1041 	 *      i_state = 0
1042 	 * clean_inode(): zero fills and sets
1043 	 *      i_count = 1
1044 	 *      i_nlink = 1
1045 	 *      i_op = NULL;
1046 	 */
1047 	bh = udf_read_ptagged(inode->i_sb, UDF_I_LOCATION(inode), 0, &ident);
1048 
1049 	if (!bh)
1050 	{
1051 		printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed !bh\n",
1052 			inode->i_ino);
1053 		make_bad_inode(inode);
1054 		return;
1055 	}
1056 
1057 	if (ident != TAG_IDENT_FE && ident != TAG_IDENT_EFE &&
1058 		ident != TAG_IDENT_USE)
1059 	{
1060 		printk(KERN_ERR "udf: udf_read_inode(ino %ld) failed ident=%d\n",
1061 			inode->i_ino, ident);
1062 		brelse(bh);
1063 		make_bad_inode(inode);
1064 		return;
1065 	}
1066 
1067 	fe = (struct fileEntry *)bh->b_data;
1068 
1069 	if (le16_to_cpu(fe->icbTag.strategyType) == 4096)
1070 	{
1071 		struct buffer_head *ibh = NULL, *nbh = NULL;
1072 		struct indirectEntry *ie;
1073 
1074 		ibh = udf_read_ptagged(inode->i_sb, UDF_I_LOCATION(inode), 1, &ident);
1075 		if (ident == TAG_IDENT_IE)
1076 		{
1077 			if (ibh)
1078 			{
1079 				kernel_lb_addr loc;
1080 				ie = (struct indirectEntry *)ibh->b_data;
1081 
1082 				loc = lelb_to_cpu(ie->indirectICB.extLocation);
1083 
1084 				if (ie->indirectICB.extLength &&
1085 					(nbh = udf_read_ptagged(inode->i_sb, loc, 0, &ident)))
1086 				{
1087 					if (ident == TAG_IDENT_FE ||
1088 						ident == TAG_IDENT_EFE)
1089 					{
1090 						memcpy(&UDF_I_LOCATION(inode), &loc, sizeof(kernel_lb_addr));
1091 						brelse(bh);
1092 						brelse(ibh);
1093 						brelse(nbh);
1094 						__udf_read_inode(inode);
1095 						return;
1096 					}
1097 					else
1098 					{
1099 						brelse(nbh);
1100 						brelse(ibh);
1101 					}
1102 				}
1103 				else
1104 					brelse(ibh);
1105 			}
1106 		}
1107 		else
1108 			brelse(ibh);
1109 	}
1110 	else if (le16_to_cpu(fe->icbTag.strategyType) != 4)
1111 	{
1112 		printk(KERN_ERR "udf: unsupported strategy type: %d\n",
1113 			le16_to_cpu(fe->icbTag.strategyType));
1114 		brelse(bh);
1115 		make_bad_inode(inode);
1116 		return;
1117 	}
1118 	udf_fill_inode(inode, bh);
1119 
1120 	brelse(bh);
1121 }
1122 
1123 static void udf_fill_inode(struct inode *inode, struct buffer_head *bh)
1124 {
1125 	struct fileEntry *fe;
1126 	struct extendedFileEntry *efe;
1127 	time_t convtime;
1128 	long convtime_usec;
1129 	int offset;
1130 
1131 	fe = (struct fileEntry *)bh->b_data;
1132 	efe = (struct extendedFileEntry *)bh->b_data;
1133 
1134 	if (le16_to_cpu(fe->icbTag.strategyType) == 4)
1135 		UDF_I_STRAT4096(inode) = 0;
1136 	else /* if (le16_to_cpu(fe->icbTag.strategyType) == 4096) */
1137 		UDF_I_STRAT4096(inode) = 1;
1138 
1139 	UDF_I_ALLOCTYPE(inode) = le16_to_cpu(fe->icbTag.flags) & ICBTAG_FLAG_AD_MASK;
1140 	UDF_I_UNIQUE(inode) = 0;
1141 	UDF_I_LENEATTR(inode) = 0;
1142 	UDF_I_LENEXTENTS(inode) = 0;
1143 	UDF_I_LENALLOC(inode) = 0;
1144 	UDF_I_NEXT_ALLOC_BLOCK(inode) = 0;
1145 	UDF_I_NEXT_ALLOC_GOAL(inode) = 0;
1146 	if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_EFE)
1147 	{
1148 		UDF_I_EFE(inode) = 1;
1149 		UDF_I_USE(inode) = 0;
1150 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry), GFP_KERNEL);
1151 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct extendedFileEntry), inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry));
1152 	}
1153 	else if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_FE)
1154 	{
1155 		UDF_I_EFE(inode) = 0;
1156 		UDF_I_USE(inode) = 0;
1157 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct fileEntry), GFP_KERNEL);
1158 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct fileEntry), inode->i_sb->s_blocksize - sizeof(struct fileEntry));
1159 	}
1160 	else if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_USE)
1161 	{
1162 		UDF_I_EFE(inode) = 0;
1163 		UDF_I_USE(inode) = 1;
1164 		UDF_I_LENALLOC(inode) =
1165 			le32_to_cpu(
1166 				((struct unallocSpaceEntry *)bh->b_data)->lengthAllocDescs);
1167 		UDF_I_DATA(inode) = kmalloc(inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry), GFP_KERNEL);
1168 		memcpy(UDF_I_DATA(inode), bh->b_data + sizeof(struct unallocSpaceEntry), inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry));
1169 		return;
1170 	}
1171 
1172 	inode->i_uid = le32_to_cpu(fe->uid);
1173 	if (inode->i_uid == -1 || UDF_QUERY_FLAG(inode->i_sb,
1174 					UDF_FLAG_UID_IGNORE))
1175 		inode->i_uid = UDF_SB(inode->i_sb)->s_uid;
1176 
1177 	inode->i_gid = le32_to_cpu(fe->gid);
1178 	if (inode->i_gid == -1 || UDF_QUERY_FLAG(inode->i_sb,
1179 					UDF_FLAG_GID_IGNORE))
1180 		inode->i_gid = UDF_SB(inode->i_sb)->s_gid;
1181 
1182 	inode->i_nlink = le16_to_cpu(fe->fileLinkCount);
1183 	if (!inode->i_nlink)
1184 		inode->i_nlink = 1;
1185 
1186 	inode->i_size = le64_to_cpu(fe->informationLength);
1187 	UDF_I_LENEXTENTS(inode) = inode->i_size;
1188 
1189 	inode->i_mode = udf_convert_permissions(fe);
1190 	inode->i_mode &= ~UDF_SB(inode->i_sb)->s_umask;
1191 
1192 	if (UDF_I_EFE(inode) == 0)
1193 	{
1194 		inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) <<
1195 			(inode->i_sb->s_blocksize_bits - 9);
1196 
1197 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1198 			lets_to_cpu(fe->accessTime)) )
1199 		{
1200 			inode->i_atime.tv_sec = convtime;
1201 			inode->i_atime.tv_nsec = convtime_usec * 1000;
1202 		}
1203 		else
1204 		{
1205 			inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb);
1206 		}
1207 
1208 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1209 			lets_to_cpu(fe->modificationTime)) )
1210 		{
1211 			inode->i_mtime.tv_sec = convtime;
1212 			inode->i_mtime.tv_nsec = convtime_usec * 1000;
1213 		}
1214 		else
1215 		{
1216 			inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb);
1217 		}
1218 
1219 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1220 			lets_to_cpu(fe->attrTime)) )
1221 		{
1222 			inode->i_ctime.tv_sec = convtime;
1223 			inode->i_ctime.tv_nsec = convtime_usec * 1000;
1224 		}
1225 		else
1226 		{
1227 			inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb);
1228 		}
1229 
1230 		UDF_I_UNIQUE(inode) = le64_to_cpu(fe->uniqueID);
1231 		UDF_I_LENEATTR(inode) = le32_to_cpu(fe->lengthExtendedAttr);
1232 		UDF_I_LENALLOC(inode) = le32_to_cpu(fe->lengthAllocDescs);
1233 		offset = sizeof(struct fileEntry) + UDF_I_LENEATTR(inode);
1234 	}
1235 	else
1236 	{
1237 		inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) <<
1238 			(inode->i_sb->s_blocksize_bits - 9);
1239 
1240 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1241 			lets_to_cpu(efe->accessTime)) )
1242 		{
1243 			inode->i_atime.tv_sec = convtime;
1244 			inode->i_atime.tv_nsec = convtime_usec * 1000;
1245 		}
1246 		else
1247 		{
1248 			inode->i_atime = UDF_SB_RECORDTIME(inode->i_sb);
1249 		}
1250 
1251 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1252 			lets_to_cpu(efe->modificationTime)) )
1253 		{
1254 			inode->i_mtime.tv_sec = convtime;
1255 			inode->i_mtime.tv_nsec = convtime_usec * 1000;
1256 		}
1257 		else
1258 		{
1259 			inode->i_mtime = UDF_SB_RECORDTIME(inode->i_sb);
1260 		}
1261 
1262 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1263 			lets_to_cpu(efe->createTime)) )
1264 		{
1265 			UDF_I_CRTIME(inode).tv_sec = convtime;
1266 			UDF_I_CRTIME(inode).tv_nsec = convtime_usec * 1000;
1267 		}
1268 		else
1269 		{
1270 			UDF_I_CRTIME(inode) = UDF_SB_RECORDTIME(inode->i_sb);
1271 		}
1272 
1273 		if ( udf_stamp_to_time(&convtime, &convtime_usec,
1274 			lets_to_cpu(efe->attrTime)) )
1275 		{
1276 			inode->i_ctime.tv_sec = convtime;
1277 			inode->i_ctime.tv_nsec = convtime_usec * 1000;
1278 		}
1279 		else
1280 		{
1281 			inode->i_ctime = UDF_SB_RECORDTIME(inode->i_sb);
1282 		}
1283 
1284 		UDF_I_UNIQUE(inode) = le64_to_cpu(efe->uniqueID);
1285 		UDF_I_LENEATTR(inode) = le32_to_cpu(efe->lengthExtendedAttr);
1286 		UDF_I_LENALLOC(inode) = le32_to_cpu(efe->lengthAllocDescs);
1287 		offset = sizeof(struct extendedFileEntry) + UDF_I_LENEATTR(inode);
1288 	}
1289 
1290 	switch (fe->icbTag.fileType)
1291 	{
1292 		case ICBTAG_FILE_TYPE_DIRECTORY:
1293 		{
1294 			inode->i_op = &udf_dir_inode_operations;
1295 			inode->i_fop = &udf_dir_operations;
1296 			inode->i_mode |= S_IFDIR;
1297 			inc_nlink(inode);
1298 			break;
1299 		}
1300 		case ICBTAG_FILE_TYPE_REALTIME:
1301 		case ICBTAG_FILE_TYPE_REGULAR:
1302 		case ICBTAG_FILE_TYPE_UNDEF:
1303 		{
1304 			if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)
1305 				inode->i_data.a_ops = &udf_adinicb_aops;
1306 			else
1307 				inode->i_data.a_ops = &udf_aops;
1308 			inode->i_op = &udf_file_inode_operations;
1309 			inode->i_fop = &udf_file_operations;
1310 			inode->i_mode |= S_IFREG;
1311 			break;
1312 		}
1313 		case ICBTAG_FILE_TYPE_BLOCK:
1314 		{
1315 			inode->i_mode |= S_IFBLK;
1316 			break;
1317 		}
1318 		case ICBTAG_FILE_TYPE_CHAR:
1319 		{
1320 			inode->i_mode |= S_IFCHR;
1321 			break;
1322 		}
1323 		case ICBTAG_FILE_TYPE_FIFO:
1324 		{
1325 			init_special_inode(inode, inode->i_mode | S_IFIFO, 0);
1326 			break;
1327 		}
1328 		case ICBTAG_FILE_TYPE_SOCKET:
1329 		{
1330 			init_special_inode(inode, inode->i_mode | S_IFSOCK, 0);
1331 			break;
1332 		}
1333 		case ICBTAG_FILE_TYPE_SYMLINK:
1334 		{
1335 			inode->i_data.a_ops = &udf_symlink_aops;
1336 			inode->i_op = &page_symlink_inode_operations;
1337 			inode->i_mode = S_IFLNK|S_IRWXUGO;
1338 			break;
1339 		}
1340 		default:
1341 		{
1342 			printk(KERN_ERR "udf: udf_fill_inode(ino %ld) failed unknown file type=%d\n",
1343 				inode->i_ino, fe->icbTag.fileType);
1344 			make_bad_inode(inode);
1345 			return;
1346 		}
1347 	}
1348 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1349 	{
1350 		struct deviceSpec *dsea =
1351 			(struct deviceSpec *)
1352 				udf_get_extendedattr(inode, 12, 1);
1353 
1354 		if (dsea)
1355 		{
1356 			init_special_inode(inode, inode->i_mode, MKDEV(
1357 				le32_to_cpu(dsea->majorDeviceIdent),
1358 				le32_to_cpu(dsea->minorDeviceIdent)));
1359 			/* Developer ID ??? */
1360 		}
1361 		else
1362 		{
1363 			make_bad_inode(inode);
1364 		}
1365 	}
1366 }
1367 
1368 static mode_t
1369 udf_convert_permissions(struct fileEntry *fe)
1370 {
1371 	mode_t mode;
1372 	uint32_t permissions;
1373 	uint32_t flags;
1374 
1375 	permissions = le32_to_cpu(fe->permissions);
1376 	flags = le16_to_cpu(fe->icbTag.flags);
1377 
1378 	mode =	(( permissions      ) & S_IRWXO) |
1379 		(( permissions >> 2 ) & S_IRWXG) |
1380 		(( permissions >> 4 ) & S_IRWXU) |
1381 		(( flags & ICBTAG_FLAG_SETUID) ? S_ISUID : 0) |
1382 		(( flags & ICBTAG_FLAG_SETGID) ? S_ISGID : 0) |
1383 		(( flags & ICBTAG_FLAG_STICKY) ? S_ISVTX : 0);
1384 
1385 	return mode;
1386 }
1387 
1388 /*
1389  * udf_write_inode
1390  *
1391  * PURPOSE
1392  *	Write out the specified inode.
1393  *
1394  * DESCRIPTION
1395  *	This routine is called whenever an inode is synced.
1396  *	Currently this routine is just a placeholder.
1397  *
1398  * HISTORY
1399  *	July 1, 1997 - Andrew E. Mileski
1400  *	Written, tested, and released.
1401  */
1402 
1403 int udf_write_inode(struct inode * inode, int sync)
1404 {
1405 	int ret;
1406 	lock_kernel();
1407 	ret = udf_update_inode(inode, sync);
1408 	unlock_kernel();
1409 	return ret;
1410 }
1411 
1412 int udf_sync_inode(struct inode * inode)
1413 {
1414 	return udf_update_inode(inode, 1);
1415 }
1416 
1417 static int
1418 udf_update_inode(struct inode *inode, int do_sync)
1419 {
1420 	struct buffer_head *bh = NULL;
1421 	struct fileEntry *fe;
1422 	struct extendedFileEntry *efe;
1423 	uint32_t udfperms;
1424 	uint16_t icbflags;
1425 	uint16_t crclen;
1426 	int i;
1427 	kernel_timestamp cpu_time;
1428 	int err = 0;
1429 
1430 	bh = udf_tread(inode->i_sb,
1431 		udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0));
1432 
1433 	if (!bh)
1434 	{
1435 		udf_debug("bread failure\n");
1436 		return -EIO;
1437 	}
1438 
1439 	memset(bh->b_data, 0x00, inode->i_sb->s_blocksize);
1440 
1441 	fe = (struct fileEntry *)bh->b_data;
1442 	efe = (struct extendedFileEntry *)bh->b_data;
1443 
1444 	if (le16_to_cpu(fe->descTag.tagIdent) == TAG_IDENT_USE)
1445 	{
1446 		struct unallocSpaceEntry *use =
1447 			(struct unallocSpaceEntry *)bh->b_data;
1448 
1449 		use->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1450 		memcpy(bh->b_data + sizeof(struct unallocSpaceEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct unallocSpaceEntry));
1451 		crclen = sizeof(struct unallocSpaceEntry) + UDF_I_LENALLOC(inode) -
1452 			sizeof(tag);
1453 		use->descTag.tagLocation = cpu_to_le32(UDF_I_LOCATION(inode).logicalBlockNum);
1454 		use->descTag.descCRCLength = cpu_to_le16(crclen);
1455 		use->descTag.descCRC = cpu_to_le16(udf_crc((char *)use + sizeof(tag), crclen, 0));
1456 
1457 		use->descTag.tagChecksum = 0;
1458 		for (i=0; i<16; i++)
1459 			if (i != 4)
1460 				use->descTag.tagChecksum += ((uint8_t *)&(use->descTag))[i];
1461 
1462 		mark_buffer_dirty(bh);
1463 		brelse(bh);
1464 		return err;
1465 	}
1466 
1467 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET))
1468 		fe->uid = cpu_to_le32(-1);
1469 	else fe->uid = cpu_to_le32(inode->i_uid);
1470 
1471 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET))
1472 		fe->gid = cpu_to_le32(-1);
1473 	else fe->gid = cpu_to_le32(inode->i_gid);
1474 
1475 	udfperms =	((inode->i_mode & S_IRWXO)     ) |
1476 			((inode->i_mode & S_IRWXG) << 2) |
1477 			((inode->i_mode & S_IRWXU) << 4);
1478 
1479 	udfperms |=	(le32_to_cpu(fe->permissions) &
1480 			(FE_PERM_O_DELETE | FE_PERM_O_CHATTR |
1481 			 FE_PERM_G_DELETE | FE_PERM_G_CHATTR |
1482 			 FE_PERM_U_DELETE | FE_PERM_U_CHATTR));
1483 	fe->permissions = cpu_to_le32(udfperms);
1484 
1485 	if (S_ISDIR(inode->i_mode))
1486 		fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1);
1487 	else
1488 		fe->fileLinkCount = cpu_to_le16(inode->i_nlink);
1489 
1490 	fe->informationLength = cpu_to_le64(inode->i_size);
1491 
1492 	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1493 	{
1494 		regid *eid;
1495 		struct deviceSpec *dsea =
1496 			(struct deviceSpec *)
1497 				udf_get_extendedattr(inode, 12, 1);
1498 
1499 		if (!dsea)
1500 		{
1501 			dsea = (struct deviceSpec *)
1502 				udf_add_extendedattr(inode,
1503 					sizeof(struct deviceSpec) +
1504 					sizeof(regid), 12, 0x3);
1505 			dsea->attrType = cpu_to_le32(12);
1506 			dsea->attrSubtype = 1;
1507 			dsea->attrLength = cpu_to_le32(sizeof(struct deviceSpec) +
1508 				sizeof(regid));
1509 			dsea->impUseLength = cpu_to_le32(sizeof(regid));
1510 		}
1511 		eid = (regid *)dsea->impUse;
1512 		memset(eid, 0, sizeof(regid));
1513 		strcpy(eid->ident, UDF_ID_DEVELOPER);
1514 		eid->identSuffix[0] = UDF_OS_CLASS_UNIX;
1515 		eid->identSuffix[1] = UDF_OS_ID_LINUX;
1516 		dsea->majorDeviceIdent = cpu_to_le32(imajor(inode));
1517 		dsea->minorDeviceIdent = cpu_to_le32(iminor(inode));
1518 	}
1519 
1520 	if (UDF_I_EFE(inode) == 0)
1521 	{
1522 		memcpy(bh->b_data + sizeof(struct fileEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct fileEntry));
1523 		fe->logicalBlocksRecorded = cpu_to_le64(
1524 			(inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >>
1525 			(inode->i_sb->s_blocksize_bits - 9));
1526 
1527 		if (udf_time_to_stamp(&cpu_time, inode->i_atime))
1528 			fe->accessTime = cpu_to_lets(cpu_time);
1529 		if (udf_time_to_stamp(&cpu_time, inode->i_mtime))
1530 			fe->modificationTime = cpu_to_lets(cpu_time);
1531 		if (udf_time_to_stamp(&cpu_time, inode->i_ctime))
1532 			fe->attrTime = cpu_to_lets(cpu_time);
1533 		memset(&(fe->impIdent), 0, sizeof(regid));
1534 		strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER);
1535 		fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1536 		fe->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
1537 		fe->uniqueID = cpu_to_le64(UDF_I_UNIQUE(inode));
1538 		fe->lengthExtendedAttr = cpu_to_le32(UDF_I_LENEATTR(inode));
1539 		fe->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1540 		fe->descTag.tagIdent = cpu_to_le16(TAG_IDENT_FE);
1541 		crclen = sizeof(struct fileEntry);
1542 	}
1543 	else
1544 	{
1545 		memcpy(bh->b_data + sizeof(struct extendedFileEntry), UDF_I_DATA(inode), inode->i_sb->s_blocksize - sizeof(struct extendedFileEntry));
1546 		efe->objectSize = cpu_to_le64(inode->i_size);
1547 		efe->logicalBlocksRecorded = cpu_to_le64(
1548 			(inode->i_blocks + (1 << (inode->i_sb->s_blocksize_bits - 9)) - 1) >>
1549 			(inode->i_sb->s_blocksize_bits - 9));
1550 
1551 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_atime.tv_sec ||
1552 			(UDF_I_CRTIME(inode).tv_sec == inode->i_atime.tv_sec &&
1553 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_atime.tv_nsec))
1554 		{
1555 			UDF_I_CRTIME(inode) = inode->i_atime;
1556 		}
1557 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_mtime.tv_sec ||
1558 			(UDF_I_CRTIME(inode).tv_sec == inode->i_mtime.tv_sec &&
1559 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_mtime.tv_nsec))
1560 		{
1561 			UDF_I_CRTIME(inode) = inode->i_mtime;
1562 		}
1563 		if (UDF_I_CRTIME(inode).tv_sec > inode->i_ctime.tv_sec ||
1564 			(UDF_I_CRTIME(inode).tv_sec == inode->i_ctime.tv_sec &&
1565 			 UDF_I_CRTIME(inode).tv_nsec > inode->i_ctime.tv_nsec))
1566 		{
1567 			UDF_I_CRTIME(inode) = inode->i_ctime;
1568 		}
1569 
1570 		if (udf_time_to_stamp(&cpu_time, inode->i_atime))
1571 			efe->accessTime = cpu_to_lets(cpu_time);
1572 		if (udf_time_to_stamp(&cpu_time, inode->i_mtime))
1573 			efe->modificationTime = cpu_to_lets(cpu_time);
1574 		if (udf_time_to_stamp(&cpu_time, UDF_I_CRTIME(inode)))
1575 			efe->createTime = cpu_to_lets(cpu_time);
1576 		if (udf_time_to_stamp(&cpu_time, inode->i_ctime))
1577 			efe->attrTime = cpu_to_lets(cpu_time);
1578 
1579 		memset(&(efe->impIdent), 0, sizeof(regid));
1580 		strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER);
1581 		efe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
1582 		efe->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
1583 		efe->uniqueID = cpu_to_le64(UDF_I_UNIQUE(inode));
1584 		efe->lengthExtendedAttr = cpu_to_le32(UDF_I_LENEATTR(inode));
1585 		efe->lengthAllocDescs = cpu_to_le32(UDF_I_LENALLOC(inode));
1586 		efe->descTag.tagIdent = cpu_to_le16(TAG_IDENT_EFE);
1587 		crclen = sizeof(struct extendedFileEntry);
1588 	}
1589 	if (UDF_I_STRAT4096(inode))
1590 	{
1591 		fe->icbTag.strategyType = cpu_to_le16(4096);
1592 		fe->icbTag.strategyParameter = cpu_to_le16(1);
1593 		fe->icbTag.numEntries = cpu_to_le16(2);
1594 	}
1595 	else
1596 	{
1597 		fe->icbTag.strategyType = cpu_to_le16(4);
1598 		fe->icbTag.numEntries = cpu_to_le16(1);
1599 	}
1600 
1601 	if (S_ISDIR(inode->i_mode))
1602 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_DIRECTORY;
1603 	else if (S_ISREG(inode->i_mode))
1604 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_REGULAR;
1605 	else if (S_ISLNK(inode->i_mode))
1606 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_SYMLINK;
1607 	else if (S_ISBLK(inode->i_mode))
1608 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_BLOCK;
1609 	else if (S_ISCHR(inode->i_mode))
1610 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_CHAR;
1611 	else if (S_ISFIFO(inode->i_mode))
1612 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_FIFO;
1613 	else if (S_ISSOCK(inode->i_mode))
1614 		fe->icbTag.fileType = ICBTAG_FILE_TYPE_SOCKET;
1615 
1616 	icbflags =	UDF_I_ALLOCTYPE(inode) |
1617 			((inode->i_mode & S_ISUID) ? ICBTAG_FLAG_SETUID : 0) |
1618 			((inode->i_mode & S_ISGID) ? ICBTAG_FLAG_SETGID : 0) |
1619 			((inode->i_mode & S_ISVTX) ? ICBTAG_FLAG_STICKY : 0) |
1620 			(le16_to_cpu(fe->icbTag.flags) &
1621 				~(ICBTAG_FLAG_AD_MASK | ICBTAG_FLAG_SETUID |
1622 				ICBTAG_FLAG_SETGID | ICBTAG_FLAG_STICKY));
1623 
1624 	fe->icbTag.flags = cpu_to_le16(icbflags);
1625 	if (UDF_SB_UDFREV(inode->i_sb) >= 0x0200)
1626 		fe->descTag.descVersion = cpu_to_le16(3);
1627 	else
1628 		fe->descTag.descVersion = cpu_to_le16(2);
1629 	fe->descTag.tagSerialNum = cpu_to_le16(UDF_SB_SERIALNUM(inode->i_sb));
1630 	fe->descTag.tagLocation = cpu_to_le32(UDF_I_LOCATION(inode).logicalBlockNum);
1631 	crclen += UDF_I_LENEATTR(inode) + UDF_I_LENALLOC(inode) - sizeof(tag);
1632 	fe->descTag.descCRCLength = cpu_to_le16(crclen);
1633 	fe->descTag.descCRC = cpu_to_le16(udf_crc((char *)fe + sizeof(tag), crclen, 0));
1634 
1635 	fe->descTag.tagChecksum = 0;
1636 	for (i=0; i<16; i++)
1637 		if (i != 4)
1638 			fe->descTag.tagChecksum += ((uint8_t *)&(fe->descTag))[i];
1639 
1640 	/* write the data blocks */
1641 	mark_buffer_dirty(bh);
1642 	if (do_sync)
1643 	{
1644 		sync_dirty_buffer(bh);
1645 		if (buffer_req(bh) && !buffer_uptodate(bh))
1646 		{
1647 			printk("IO error syncing udf inode [%s:%08lx]\n",
1648 				inode->i_sb->s_id, inode->i_ino);
1649 			err = -EIO;
1650 		}
1651 	}
1652 	brelse(bh);
1653 	return err;
1654 }
1655 
1656 struct inode *
1657 udf_iget(struct super_block *sb, kernel_lb_addr ino)
1658 {
1659 	unsigned long block = udf_get_lb_pblock(sb, ino, 0);
1660 	struct inode *inode = iget_locked(sb, block);
1661 
1662 	if (!inode)
1663 		return NULL;
1664 
1665 	if (inode->i_state & I_NEW) {
1666 		memcpy(&UDF_I_LOCATION(inode), &ino, sizeof(kernel_lb_addr));
1667 		__udf_read_inode(inode);
1668 		unlock_new_inode(inode);
1669 	}
1670 
1671 	if (is_bad_inode(inode))
1672 		goto out_iput;
1673 
1674 	if (ino.logicalBlockNum >= UDF_SB_PARTLEN(sb, ino.partitionReferenceNum)) {
1675 		udf_debug("block=%d, partition=%d out of range\n",
1676 			ino.logicalBlockNum, ino.partitionReferenceNum);
1677 		make_bad_inode(inode);
1678 		goto out_iput;
1679 	}
1680 
1681 	return inode;
1682 
1683  out_iput:
1684 	iput(inode);
1685 	return NULL;
1686 }
1687 
1688 int8_t udf_add_aext(struct inode *inode, struct extent_position *epos,
1689 	kernel_lb_addr eloc, uint32_t elen, int inc)
1690 {
1691 	int adsize;
1692 	short_ad *sad = NULL;
1693 	long_ad *lad = NULL;
1694 	struct allocExtDesc *aed;
1695 	int8_t etype;
1696 	uint8_t *ptr;
1697 
1698 	if (!epos->bh)
1699 		ptr = UDF_I_DATA(inode) + epos->offset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1700 	else
1701 		ptr = epos->bh->b_data + epos->offset;
1702 
1703 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
1704 		adsize = sizeof(short_ad);
1705 	else if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_LONG)
1706 		adsize = sizeof(long_ad);
1707 	else
1708 		return -1;
1709 
1710 	if (epos->offset + (2 * adsize) > inode->i_sb->s_blocksize)
1711 	{
1712 		char *sptr, *dptr;
1713 		struct buffer_head *nbh;
1714 		int err, loffset;
1715 		kernel_lb_addr obloc = epos->block;
1716 
1717 		if (!(epos->block.logicalBlockNum = udf_new_block(inode->i_sb, NULL,
1718 			obloc.partitionReferenceNum, obloc.logicalBlockNum, &err)))
1719 		{
1720 			return -1;
1721 		}
1722 		if (!(nbh = udf_tgetblk(inode->i_sb, udf_get_lb_pblock(inode->i_sb,
1723 			epos->block, 0))))
1724 		{
1725 			return -1;
1726 		}
1727 		lock_buffer(nbh);
1728 		memset(nbh->b_data, 0x00, inode->i_sb->s_blocksize);
1729 		set_buffer_uptodate(nbh);
1730 		unlock_buffer(nbh);
1731 		mark_buffer_dirty_inode(nbh, inode);
1732 
1733 		aed = (struct allocExtDesc *)(nbh->b_data);
1734 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT))
1735 			aed->previousAllocExtLocation = cpu_to_le32(obloc.logicalBlockNum);
1736 		if (epos->offset + adsize > inode->i_sb->s_blocksize)
1737 		{
1738 			loffset = epos->offset;
1739 			aed->lengthAllocDescs = cpu_to_le32(adsize);
1740 			sptr = ptr - adsize;
1741 			dptr = nbh->b_data + sizeof(struct allocExtDesc);
1742 			memcpy(dptr, sptr, adsize);
1743 			epos->offset = sizeof(struct allocExtDesc) + adsize;
1744 		}
1745 		else
1746 		{
1747 			loffset = epos->offset + adsize;
1748 			aed->lengthAllocDescs = cpu_to_le32(0);
1749 			sptr = ptr;
1750 			epos->offset = sizeof(struct allocExtDesc);
1751 
1752 			if (epos->bh)
1753 			{
1754 				aed = (struct allocExtDesc *)epos->bh->b_data;
1755 				aed->lengthAllocDescs =
1756 					cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) + adsize);
1757 			}
1758 			else
1759 			{
1760 				UDF_I_LENALLOC(inode) += adsize;
1761 				mark_inode_dirty(inode);
1762 			}
1763 		}
1764 		if (UDF_SB_UDFREV(inode->i_sb) >= 0x0200)
1765 			udf_new_tag(nbh->b_data, TAG_IDENT_AED, 3, 1,
1766 				epos->block.logicalBlockNum, sizeof(tag));
1767 		else
1768 			udf_new_tag(nbh->b_data, TAG_IDENT_AED, 2, 1,
1769 				epos->block.logicalBlockNum, sizeof(tag));
1770 		switch (UDF_I_ALLOCTYPE(inode))
1771 		{
1772 			case ICBTAG_FLAG_AD_SHORT:
1773 			{
1774 				sad = (short_ad *)sptr;
1775 				sad->extLength = cpu_to_le32(
1776 					EXT_NEXT_EXTENT_ALLOCDECS |
1777 					inode->i_sb->s_blocksize);
1778 				sad->extPosition = cpu_to_le32(epos->block.logicalBlockNum);
1779 				break;
1780 			}
1781 			case ICBTAG_FLAG_AD_LONG:
1782 			{
1783 				lad = (long_ad *)sptr;
1784 				lad->extLength = cpu_to_le32(
1785 					EXT_NEXT_EXTENT_ALLOCDECS |
1786 					inode->i_sb->s_blocksize);
1787 				lad->extLocation = cpu_to_lelb(epos->block);
1788 				memset(lad->impUse, 0x00, sizeof(lad->impUse));
1789 				break;
1790 			}
1791 		}
1792 		if (epos->bh)
1793 		{
1794 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1795 				udf_update_tag(epos->bh->b_data, loffset);
1796 			else
1797 				udf_update_tag(epos->bh->b_data, sizeof(struct allocExtDesc));
1798 			mark_buffer_dirty_inode(epos->bh, inode);
1799 			brelse(epos->bh);
1800 		}
1801 		else
1802 			mark_inode_dirty(inode);
1803 		epos->bh = nbh;
1804 	}
1805 
1806 	etype = udf_write_aext(inode, epos, eloc, elen, inc);
1807 
1808 	if (!epos->bh)
1809 	{
1810 		UDF_I_LENALLOC(inode) += adsize;
1811 		mark_inode_dirty(inode);
1812 	}
1813 	else
1814 	{
1815 		aed = (struct allocExtDesc *)epos->bh->b_data;
1816 		aed->lengthAllocDescs =
1817 			cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) + adsize);
1818 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1819 			udf_update_tag(epos->bh->b_data, epos->offset + (inc ? 0 : adsize));
1820 		else
1821 			udf_update_tag(epos->bh->b_data, sizeof(struct allocExtDesc));
1822 		mark_buffer_dirty_inode(epos->bh, inode);
1823 	}
1824 
1825 	return etype;
1826 }
1827 
1828 int8_t udf_write_aext(struct inode *inode, struct extent_position *epos,
1829     kernel_lb_addr eloc, uint32_t elen, int inc)
1830 {
1831 	int adsize;
1832 	uint8_t *ptr;
1833 
1834 	if (!epos->bh)
1835 		ptr = UDF_I_DATA(inode) + epos->offset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1836 	else
1837 		ptr = epos->bh->b_data + epos->offset;
1838 
1839 	switch (UDF_I_ALLOCTYPE(inode))
1840 	{
1841 		case ICBTAG_FLAG_AD_SHORT:
1842 		{
1843 			short_ad *sad = (short_ad *)ptr;
1844 			sad->extLength = cpu_to_le32(elen);
1845 			sad->extPosition = cpu_to_le32(eloc.logicalBlockNum);
1846 			adsize = sizeof(short_ad);
1847 			break;
1848 		}
1849 		case ICBTAG_FLAG_AD_LONG:
1850 		{
1851 			long_ad *lad = (long_ad *)ptr;
1852 			lad->extLength = cpu_to_le32(elen);
1853 			lad->extLocation = cpu_to_lelb(eloc);
1854 			memset(lad->impUse, 0x00, sizeof(lad->impUse));
1855 			adsize = sizeof(long_ad);
1856 			break;
1857 		}
1858 		default:
1859 			return -1;
1860 	}
1861 
1862 	if (epos->bh)
1863 	{
1864 		if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
1865 		{
1866 			struct allocExtDesc *aed = (struct allocExtDesc *)epos->bh->b_data;
1867 			udf_update_tag(epos->bh->b_data,
1868 				le32_to_cpu(aed->lengthAllocDescs) + sizeof(struct allocExtDesc));
1869 		}
1870 		mark_buffer_dirty_inode(epos->bh, inode);
1871 	}
1872 	else
1873 		mark_inode_dirty(inode);
1874 
1875 	if (inc)
1876 		epos->offset += adsize;
1877 	return (elen >> 30);
1878 }
1879 
1880 int8_t udf_next_aext(struct inode *inode, struct extent_position *epos,
1881 	kernel_lb_addr *eloc, uint32_t *elen, int inc)
1882 {
1883 	int8_t etype;
1884 
1885 	while ((etype = udf_current_aext(inode, epos, eloc, elen, inc)) ==
1886 		(EXT_NEXT_EXTENT_ALLOCDECS >> 30))
1887 	{
1888 		epos->block = *eloc;
1889 		epos->offset = sizeof(struct allocExtDesc);
1890 		brelse(epos->bh);
1891 		if (!(epos->bh = udf_tread(inode->i_sb, udf_get_lb_pblock(inode->i_sb, epos->block, 0))))
1892 		{
1893 			udf_debug("reading block %d failed!\n",
1894 				udf_get_lb_pblock(inode->i_sb, epos->block, 0));
1895 			return -1;
1896 		}
1897 	}
1898 
1899 	return etype;
1900 }
1901 
1902 int8_t udf_current_aext(struct inode *inode, struct extent_position *epos,
1903 	kernel_lb_addr *eloc, uint32_t *elen, int inc)
1904 {
1905 	int alen;
1906 	int8_t etype;
1907 	uint8_t *ptr;
1908 
1909 	if (!epos->bh)
1910 	{
1911 		if (!epos->offset)
1912 			epos->offset = udf_file_entry_alloc_offset(inode);
1913 		ptr = UDF_I_DATA(inode) + epos->offset - udf_file_entry_alloc_offset(inode) + UDF_I_LENEATTR(inode);
1914 		alen = udf_file_entry_alloc_offset(inode) + UDF_I_LENALLOC(inode);
1915 	}
1916 	else
1917 	{
1918 		if (!epos->offset)
1919 			epos->offset = sizeof(struct allocExtDesc);
1920 		ptr = epos->bh->b_data + epos->offset;
1921 		alen = sizeof(struct allocExtDesc) + le32_to_cpu(((struct allocExtDesc *)epos->bh->b_data)->lengthAllocDescs);
1922 	}
1923 
1924 	switch (UDF_I_ALLOCTYPE(inode))
1925 	{
1926 		case ICBTAG_FLAG_AD_SHORT:
1927 		{
1928 			short_ad *sad;
1929 
1930 			if (!(sad = udf_get_fileshortad(ptr, alen, &epos->offset, inc)))
1931 				return -1;
1932 
1933 			etype = le32_to_cpu(sad->extLength) >> 30;
1934 			eloc->logicalBlockNum = le32_to_cpu(sad->extPosition);
1935 			eloc->partitionReferenceNum = UDF_I_LOCATION(inode).partitionReferenceNum;
1936 			*elen = le32_to_cpu(sad->extLength) & UDF_EXTENT_LENGTH_MASK;
1937 			break;
1938 		}
1939 		case ICBTAG_FLAG_AD_LONG:
1940 		{
1941 			long_ad *lad;
1942 
1943 			if (!(lad = udf_get_filelongad(ptr, alen, &epos->offset, inc)))
1944 				return -1;
1945 
1946 			etype = le32_to_cpu(lad->extLength) >> 30;
1947 			*eloc = lelb_to_cpu(lad->extLocation);
1948 			*elen = le32_to_cpu(lad->extLength) & UDF_EXTENT_LENGTH_MASK;
1949 			break;
1950 		}
1951 		default:
1952 		{
1953 			udf_debug("alloc_type = %d unsupported\n", UDF_I_ALLOCTYPE(inode));
1954 			return -1;
1955 		}
1956 	}
1957 
1958 	return etype;
1959 }
1960 
1961 static int8_t
1962 udf_insert_aext(struct inode *inode, struct extent_position epos,
1963 		kernel_lb_addr neloc, uint32_t nelen)
1964 {
1965 	kernel_lb_addr oeloc;
1966 	uint32_t oelen;
1967 	int8_t etype;
1968 
1969 	if (epos.bh)
1970 		get_bh(epos.bh);
1971 
1972 	while ((etype = udf_next_aext(inode, &epos, &oeloc, &oelen, 0)) != -1)
1973 	{
1974 		udf_write_aext(inode, &epos, neloc, nelen, 1);
1975 
1976 		neloc = oeloc;
1977 		nelen = (etype << 30) | oelen;
1978 	}
1979 	udf_add_aext(inode, &epos, neloc, nelen, 1);
1980 	brelse(epos.bh);
1981 	return (nelen >> 30);
1982 }
1983 
1984 int8_t udf_delete_aext(struct inode *inode, struct extent_position epos,
1985 	kernel_lb_addr eloc, uint32_t elen)
1986 {
1987 	struct extent_position oepos;
1988 	int adsize;
1989 	int8_t etype;
1990 	struct allocExtDesc *aed;
1991 
1992 	if (epos.bh)
1993 	{
1994 		get_bh(epos.bh);
1995 		get_bh(epos.bh);
1996 	}
1997 
1998 	if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_SHORT)
1999 		adsize = sizeof(short_ad);
2000 	else if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_LONG)
2001 		adsize = sizeof(long_ad);
2002 	else
2003 		adsize = 0;
2004 
2005 	oepos = epos;
2006 	if (udf_next_aext(inode, &epos, &eloc, &elen, 1) == -1)
2007 		return -1;
2008 
2009 	while ((etype = udf_next_aext(inode, &epos, &eloc, &elen, 1)) != -1)
2010 	{
2011 		udf_write_aext(inode, &oepos, eloc, (etype << 30) | elen, 1);
2012 		if (oepos.bh != epos.bh)
2013 		{
2014 			oepos.block = epos.block;
2015 			brelse(oepos.bh);
2016 			get_bh(epos.bh);
2017 			oepos.bh = epos.bh;
2018 			oepos.offset = epos.offset - adsize;
2019 		}
2020 	}
2021 	memset(&eloc, 0x00, sizeof(kernel_lb_addr));
2022 	elen = 0;
2023 
2024 	if (epos.bh != oepos.bh)
2025 	{
2026 		udf_free_blocks(inode->i_sb, inode, epos.block, 0, 1);
2027 		udf_write_aext(inode, &oepos, eloc, elen, 1);
2028 		udf_write_aext(inode, &oepos, eloc, elen, 1);
2029 		if (!oepos.bh)
2030 		{
2031 			UDF_I_LENALLOC(inode) -= (adsize * 2);
2032 			mark_inode_dirty(inode);
2033 		}
2034 		else
2035 		{
2036 			aed = (struct allocExtDesc *)oepos.bh->b_data;
2037 			aed->lengthAllocDescs =
2038 				cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) - (2*adsize));
2039 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
2040 				udf_update_tag(oepos.bh->b_data, oepos.offset - (2*adsize));
2041 			else
2042 				udf_update_tag(oepos.bh->b_data, sizeof(struct allocExtDesc));
2043 			mark_buffer_dirty_inode(oepos.bh, inode);
2044 		}
2045 	}
2046 	else
2047 	{
2048 		udf_write_aext(inode, &oepos, eloc, elen, 1);
2049 		if (!oepos.bh)
2050 		{
2051 			UDF_I_LENALLOC(inode) -= adsize;
2052 			mark_inode_dirty(inode);
2053 		}
2054 		else
2055 		{
2056 			aed = (struct allocExtDesc *)oepos.bh->b_data;
2057 			aed->lengthAllocDescs =
2058 				cpu_to_le32(le32_to_cpu(aed->lengthAllocDescs) - adsize);
2059 			if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || UDF_SB_UDFREV(inode->i_sb) >= 0x0201)
2060 				udf_update_tag(oepos.bh->b_data, epos.offset - adsize);
2061 			else
2062 				udf_update_tag(oepos.bh->b_data, sizeof(struct allocExtDesc));
2063 			mark_buffer_dirty_inode(oepos.bh, inode);
2064 		}
2065 	}
2066 
2067 	brelse(epos.bh);
2068 	brelse(oepos.bh);
2069 	return (elen >> 30);
2070 }
2071 
2072 int8_t inode_bmap(struct inode *inode, sector_t block, struct extent_position *pos,
2073 	kernel_lb_addr *eloc, uint32_t *elen, sector_t *offset)
2074 {
2075 	loff_t lbcount = 0, bcount = (loff_t)block << inode->i_sb->s_blocksize_bits;
2076 	int8_t etype;
2077 
2078 	if (block < 0)
2079 	{
2080 		printk(KERN_ERR "udf: inode_bmap: block < 0\n");
2081 		return -1;
2082 	}
2083 
2084 	pos->offset = 0;
2085 	pos->block = UDF_I_LOCATION(inode);
2086 	pos->bh = NULL;
2087 	*elen = 0;
2088 
2089 	do
2090 	{
2091 		if ((etype = udf_next_aext(inode, pos, eloc, elen, 1)) == -1)
2092 		{
2093 			*offset = (bcount - lbcount) >> inode->i_sb->s_blocksize_bits;
2094 			UDF_I_LENEXTENTS(inode) = lbcount;
2095 			return -1;
2096 		}
2097 		lbcount += *elen;
2098 	} while (lbcount <= bcount);
2099 
2100 	*offset = (bcount + *elen - lbcount) >> inode->i_sb->s_blocksize_bits;
2101 
2102 	return etype;
2103 }
2104 
2105 long udf_block_map(struct inode *inode, sector_t block)
2106 {
2107 	kernel_lb_addr eloc;
2108 	uint32_t elen;
2109 	sector_t offset;
2110 	struct extent_position epos = { NULL, 0, { 0, 0}};
2111 	int ret;
2112 
2113 	lock_kernel();
2114 
2115 	if (inode_bmap(inode, block, &epos, &eloc, &elen, &offset) == (EXT_RECORDED_ALLOCATED >> 30))
2116 		ret = udf_get_lb_pblock(inode->i_sb, eloc, offset);
2117 	else
2118 		ret = 0;
2119 
2120 	unlock_kernel();
2121 	brelse(epos.bh);
2122 
2123 	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_VARCONV))
2124 		return udf_fixed_to_variable(ret);
2125 	else
2126 		return ret;
2127 }
2128