5 * Inode handling routines for the OSTA-UDF(tm) filesystem.
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.
13 * (C) 1998 Dave Boynton
14 * (C) 1998-2004 Ben Fennema
15 * (C) 1999-2000 Stelias Computing Inc
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
24 * 12/12/98 rewrote udf_block_map to handle next extents and descs across
25 * block boundaries (which is not actually allowed)
26 * 12/20/98 added support for strategy 4096
27 * 03/07/99 rewrote udf_block_map (again)
28 * New funcs, inode_bmap, udf_next_aext
29 * 04/19/99 Support for writing device EA's for major/minor #
34 #include <linux/module.h>
35 #include <linux/pagemap.h>
36 #include <linux/writeback.h>
37 #include <linux/slab.h>
38 #include <linux/crc-itu-t.h>
39 #include <linux/mpage.h>
40 #include <linux/uio.h>
41 #include <linux/bio.h>
46 #define EXTENT_MERGE_SIZE 5
48 #define FE_MAPPED_PERMS (FE_PERM_U_READ | FE_PERM_U_WRITE | FE_PERM_U_EXEC | \
49 FE_PERM_G_READ | FE_PERM_G_WRITE | FE_PERM_G_EXEC | \
50 FE_PERM_O_READ | FE_PERM_O_WRITE | FE_PERM_O_EXEC)
52 #define FE_DELETE_PERMS (FE_PERM_U_DELETE | FE_PERM_G_DELETE | \
55 static umode_t
udf_convert_permissions(struct fileEntry
*);
56 static int udf_update_inode(struct inode
*, int);
57 static int udf_sync_inode(struct inode
*inode
);
58 static int udf_alloc_i_data(struct inode
*inode
, size_t size
);
59 static sector_t
inode_getblk(struct inode
*, sector_t
, int *, int *);
60 static int8_t udf_insert_aext(struct inode
*, struct extent_position
,
61 struct kernel_lb_addr
, uint32_t);
62 static void udf_split_extents(struct inode
*, int *, int, udf_pblk_t
,
63 struct kernel_long_ad
*, int *);
64 static void udf_prealloc_extents(struct inode
*, int, int,
65 struct kernel_long_ad
*, int *);
66 static void udf_merge_extents(struct inode
*, struct kernel_long_ad
*, int *);
67 static void udf_update_extents(struct inode
*, struct kernel_long_ad
*, int,
68 int, struct extent_position
*);
69 static int udf_get_block(struct inode
*, sector_t
, struct buffer_head
*, int);
71 static void __udf_clear_extent_cache(struct inode
*inode
)
73 struct udf_inode_info
*iinfo
= UDF_I(inode
);
75 if (iinfo
->cached_extent
.lstart
!= -1) {
76 brelse(iinfo
->cached_extent
.epos
.bh
);
77 iinfo
->cached_extent
.lstart
= -1;
81 /* Invalidate extent cache */
82 static void udf_clear_extent_cache(struct inode
*inode
)
84 struct udf_inode_info
*iinfo
= UDF_I(inode
);
86 spin_lock(&iinfo
->i_extent_cache_lock
);
87 __udf_clear_extent_cache(inode
);
88 spin_unlock(&iinfo
->i_extent_cache_lock
);
91 /* Return contents of extent cache */
92 static int udf_read_extent_cache(struct inode
*inode
, loff_t bcount
,
93 loff_t
*lbcount
, struct extent_position
*pos
)
95 struct udf_inode_info
*iinfo
= UDF_I(inode
);
98 spin_lock(&iinfo
->i_extent_cache_lock
);
99 if ((iinfo
->cached_extent
.lstart
<= bcount
) &&
100 (iinfo
->cached_extent
.lstart
!= -1)) {
102 *lbcount
= iinfo
->cached_extent
.lstart
;
103 memcpy(pos
, &iinfo
->cached_extent
.epos
,
104 sizeof(struct extent_position
));
109 spin_unlock(&iinfo
->i_extent_cache_lock
);
113 /* Add extent to extent cache */
114 static void udf_update_extent_cache(struct inode
*inode
, loff_t estart
,
115 struct extent_position
*pos
)
117 struct udf_inode_info
*iinfo
= UDF_I(inode
);
119 spin_lock(&iinfo
->i_extent_cache_lock
);
120 /* Invalidate previously cached extent */
121 __udf_clear_extent_cache(inode
);
124 memcpy(&iinfo
->cached_extent
.epos
, pos
, sizeof(*pos
));
125 iinfo
->cached_extent
.lstart
= estart
;
126 switch (iinfo
->i_alloc_type
) {
127 case ICBTAG_FLAG_AD_SHORT
:
128 iinfo
->cached_extent
.epos
.offset
-= sizeof(struct short_ad
);
130 case ICBTAG_FLAG_AD_LONG
:
131 iinfo
->cached_extent
.epos
.offset
-= sizeof(struct long_ad
);
134 spin_unlock(&iinfo
->i_extent_cache_lock
);
137 void udf_evict_inode(struct inode
*inode
)
139 struct udf_inode_info
*iinfo
= UDF_I(inode
);
142 if (!inode
->i_nlink
&& !is_bad_inode(inode
)) {
144 udf_setsize(inode
, 0);
145 udf_update_inode(inode
, IS_SYNC(inode
));
147 truncate_inode_pages_final(&inode
->i_data
);
148 invalidate_inode_buffers(inode
);
150 if (iinfo
->i_alloc_type
!= ICBTAG_FLAG_AD_IN_ICB
&&
151 inode
->i_size
!= iinfo
->i_lenExtents
) {
152 udf_warn(inode
->i_sb
, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",
153 inode
->i_ino
, inode
->i_mode
,
154 (unsigned long long)inode
->i_size
,
155 (unsigned long long)iinfo
->i_lenExtents
);
157 kfree(iinfo
->i_ext
.i_data
);
158 iinfo
->i_ext
.i_data
= NULL
;
159 udf_clear_extent_cache(inode
);
161 udf_free_inode(inode
);
165 static void udf_write_failed(struct address_space
*mapping
, loff_t to
)
167 struct inode
*inode
= mapping
->host
;
168 struct udf_inode_info
*iinfo
= UDF_I(inode
);
169 loff_t isize
= inode
->i_size
;
172 truncate_pagecache(inode
, isize
);
173 if (iinfo
->i_alloc_type
!= ICBTAG_FLAG_AD_IN_ICB
) {
174 down_write(&iinfo
->i_data_sem
);
175 udf_clear_extent_cache(inode
);
176 udf_truncate_extents(inode
);
177 up_write(&iinfo
->i_data_sem
);
182 static int udf_writepage(struct page
*page
, struct writeback_control
*wbc
)
184 return block_write_full_page(page
, udf_get_block
, wbc
);
187 static int udf_writepages(struct address_space
*mapping
,
188 struct writeback_control
*wbc
)
190 return mpage_writepages(mapping
, wbc
, udf_get_block
);
193 static int udf_readpage(struct file
*file
, struct page
*page
)
195 return mpage_readpage(page
, udf_get_block
);
198 static int udf_readpages(struct file
*file
, struct address_space
*mapping
,
199 struct list_head
*pages
, unsigned nr_pages
)
201 return mpage_readpages(mapping
, pages
, nr_pages
, udf_get_block
);
204 static int udf_write_begin(struct file
*file
, struct address_space
*mapping
,
205 loff_t pos
, unsigned len
, unsigned flags
,
206 struct page
**pagep
, void **fsdata
)
210 ret
= block_write_begin(mapping
, pos
, len
, flags
, pagep
, udf_get_block
);
212 udf_write_failed(mapping
, pos
+ len
);
216 static ssize_t
udf_direct_IO(struct kiocb
*iocb
, struct iov_iter
*iter
)
218 struct file
*file
= iocb
->ki_filp
;
219 struct address_space
*mapping
= file
->f_mapping
;
220 struct inode
*inode
= mapping
->host
;
221 size_t count
= iov_iter_count(iter
);
224 ret
= blockdev_direct_IO(iocb
, inode
, iter
, udf_get_block
);
225 if (unlikely(ret
< 0 && iov_iter_rw(iter
) == WRITE
))
226 udf_write_failed(mapping
, iocb
->ki_pos
+ count
);
230 static sector_t
udf_bmap(struct address_space
*mapping
, sector_t block
)
232 return generic_block_bmap(mapping
, block
, udf_get_block
);
235 const struct address_space_operations udf_aops
= {
236 .readpage
= udf_readpage
,
237 .readpages
= udf_readpages
,
238 .writepage
= udf_writepage
,
239 .writepages
= udf_writepages
,
240 .write_begin
= udf_write_begin
,
241 .write_end
= generic_write_end
,
242 .direct_IO
= udf_direct_IO
,
247 * Expand file stored in ICB to a normal one-block-file
249 * This function requires i_data_sem for writing and releases it.
250 * This function requires i_mutex held
252 int udf_expand_file_adinicb(struct inode
*inode
)
256 struct udf_inode_info
*iinfo
= UDF_I(inode
);
258 struct writeback_control udf_wbc
= {
259 .sync_mode
= WB_SYNC_NONE
,
263 WARN_ON_ONCE(!inode_is_locked(inode
));
264 if (!iinfo
->i_lenAlloc
) {
265 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_USE_SHORT_AD
))
266 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_SHORT
;
268 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_LONG
;
269 /* from now on we have normal address_space methods */
270 inode
->i_data
.a_ops
= &udf_aops
;
271 up_write(&iinfo
->i_data_sem
);
272 mark_inode_dirty(inode
);
276 * Release i_data_sem so that we can lock a page - page lock ranks
277 * above i_data_sem. i_mutex still protects us against file changes.
279 up_write(&iinfo
->i_data_sem
);
281 page
= find_or_create_page(inode
->i_mapping
, 0, GFP_NOFS
);
285 if (!PageUptodate(page
)) {
286 kaddr
= kmap_atomic(page
);
287 memset(kaddr
+ iinfo
->i_lenAlloc
, 0x00,
288 PAGE_SIZE
- iinfo
->i_lenAlloc
);
289 memcpy(kaddr
, iinfo
->i_ext
.i_data
+ iinfo
->i_lenEAttr
,
291 flush_dcache_page(page
);
292 SetPageUptodate(page
);
293 kunmap_atomic(kaddr
);
295 down_write(&iinfo
->i_data_sem
);
296 memset(iinfo
->i_ext
.i_data
+ iinfo
->i_lenEAttr
, 0x00,
298 iinfo
->i_lenAlloc
= 0;
299 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_USE_SHORT_AD
))
300 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_SHORT
;
302 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_LONG
;
303 /* from now on we have normal address_space methods */
304 inode
->i_data
.a_ops
= &udf_aops
;
305 up_write(&iinfo
->i_data_sem
);
306 err
= inode
->i_data
.a_ops
->writepage(page
, &udf_wbc
);
308 /* Restore everything back so that we don't lose data... */
310 down_write(&iinfo
->i_data_sem
);
311 kaddr
= kmap_atomic(page
);
312 memcpy(iinfo
->i_ext
.i_data
+ iinfo
->i_lenEAttr
, kaddr
,
314 kunmap_atomic(kaddr
);
316 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_IN_ICB
;
317 inode
->i_data
.a_ops
= &udf_adinicb_aops
;
318 up_write(&iinfo
->i_data_sem
);
321 mark_inode_dirty(inode
);
326 struct buffer_head
*udf_expand_dir_adinicb(struct inode
*inode
,
327 udf_pblk_t
*block
, int *err
)
330 struct buffer_head
*dbh
= NULL
;
331 struct kernel_lb_addr eloc
;
333 struct extent_position epos
;
335 struct udf_fileident_bh sfibh
, dfibh
;
336 loff_t f_pos
= udf_ext0_offset(inode
);
337 int size
= udf_ext0_offset(inode
) + inode
->i_size
;
338 struct fileIdentDesc cfi
, *sfi
, *dfi
;
339 struct udf_inode_info
*iinfo
= UDF_I(inode
);
341 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_USE_SHORT_AD
))
342 alloctype
= ICBTAG_FLAG_AD_SHORT
;
344 alloctype
= ICBTAG_FLAG_AD_LONG
;
346 if (!inode
->i_size
) {
347 iinfo
->i_alloc_type
= alloctype
;
348 mark_inode_dirty(inode
);
352 /* alloc block, and copy data to it */
353 *block
= udf_new_block(inode
->i_sb
, inode
,
354 iinfo
->i_location
.partitionReferenceNum
,
355 iinfo
->i_location
.logicalBlockNum
, err
);
358 newblock
= udf_get_pblock(inode
->i_sb
, *block
,
359 iinfo
->i_location
.partitionReferenceNum
,
363 dbh
= udf_tgetblk(inode
->i_sb
, newblock
);
367 memset(dbh
->b_data
, 0x00, inode
->i_sb
->s_blocksize
);
368 set_buffer_uptodate(dbh
);
370 mark_buffer_dirty_inode(dbh
, inode
);
372 sfibh
.soffset
= sfibh
.eoffset
=
373 f_pos
& (inode
->i_sb
->s_blocksize
- 1);
374 sfibh
.sbh
= sfibh
.ebh
= NULL
;
375 dfibh
.soffset
= dfibh
.eoffset
= 0;
376 dfibh
.sbh
= dfibh
.ebh
= dbh
;
377 while (f_pos
< size
) {
378 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_IN_ICB
;
379 sfi
= udf_fileident_read(inode
, &f_pos
, &sfibh
, &cfi
, NULL
,
385 iinfo
->i_alloc_type
= alloctype
;
386 sfi
->descTag
.tagLocation
= cpu_to_le32(*block
);
387 dfibh
.soffset
= dfibh
.eoffset
;
388 dfibh
.eoffset
+= (sfibh
.eoffset
- sfibh
.soffset
);
389 dfi
= (struct fileIdentDesc
*)(dbh
->b_data
+ dfibh
.soffset
);
390 if (udf_write_fi(inode
, sfi
, dfi
, &dfibh
, sfi
->impUse
,
392 le16_to_cpu(sfi
->lengthOfImpUse
))) {
393 iinfo
->i_alloc_type
= ICBTAG_FLAG_AD_IN_ICB
;
398 mark_buffer_dirty_inode(dbh
, inode
);
400 memset(iinfo
->i_ext
.i_data
+ iinfo
->i_lenEAttr
, 0,
402 iinfo
->i_lenAlloc
= 0;
403 eloc
.logicalBlockNum
= *block
;
404 eloc
.partitionReferenceNum
=
405 iinfo
->i_location
.partitionReferenceNum
;
406 iinfo
->i_lenExtents
= inode
->i_size
;
408 epos
.block
= iinfo
->i_location
;
409 epos
.offset
= udf_file_entry_alloc_offset(inode
);
410 udf_add_aext(inode
, &epos
, &eloc
, inode
->i_size
, 0);
414 mark_inode_dirty(inode
);
418 static int udf_get_block(struct inode
*inode
, sector_t block
,
419 struct buffer_head
*bh_result
, int create
)
423 struct udf_inode_info
*iinfo
;
426 phys
= udf_block_map(inode
, block
);
428 map_bh(bh_result
, inode
->i_sb
, phys
);
434 iinfo
= UDF_I(inode
);
436 down_write(&iinfo
->i_data_sem
);
437 if (block
== iinfo
->i_next_alloc_block
+ 1) {
438 iinfo
->i_next_alloc_block
++;
439 iinfo
->i_next_alloc_goal
++;
442 udf_clear_extent_cache(inode
);
443 phys
= inode_getblk(inode
, block
, &err
, &new);
448 set_buffer_new(bh_result
);
449 map_bh(bh_result
, inode
->i_sb
, phys
);
452 up_write(&iinfo
->i_data_sem
);
456 static struct buffer_head
*udf_getblk(struct inode
*inode
, udf_pblk_t block
,
457 int create
, int *err
)
459 struct buffer_head
*bh
;
460 struct buffer_head dummy
;
463 dummy
.b_blocknr
= -1000;
464 *err
= udf_get_block(inode
, block
, &dummy
, create
);
465 if (!*err
&& buffer_mapped(&dummy
)) {
466 bh
= sb_getblk(inode
->i_sb
, dummy
.b_blocknr
);
467 if (buffer_new(&dummy
)) {
469 memset(bh
->b_data
, 0x00, inode
->i_sb
->s_blocksize
);
470 set_buffer_uptodate(bh
);
472 mark_buffer_dirty_inode(bh
, inode
);
480 /* Extend the file with new blocks totaling 'new_block_bytes',
481 * return the number of extents added
483 static int udf_do_extend_file(struct inode
*inode
,
484 struct extent_position
*last_pos
,
485 struct kernel_long_ad
*last_ext
,
486 loff_t new_block_bytes
)
489 int count
= 0, fake
= !(last_ext
->extLength
& UDF_EXTENT_LENGTH_MASK
);
490 struct super_block
*sb
= inode
->i_sb
;
491 struct kernel_lb_addr prealloc_loc
= {};
492 uint32_t prealloc_len
= 0;
493 struct udf_inode_info
*iinfo
;
496 /* The previous extent is fake and we should not extend by anything
497 * - there's nothing to do... */
498 if (!new_block_bytes
&& fake
)
501 iinfo
= UDF_I(inode
);
502 /* Round the last extent up to a multiple of block size */
503 if (last_ext
->extLength
& (sb
->s_blocksize
- 1)) {
504 last_ext
->extLength
=
505 (last_ext
->extLength
& UDF_EXTENT_FLAG_MASK
) |
506 (((last_ext
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
507 sb
->s_blocksize
- 1) & ~(sb
->s_blocksize
- 1));
508 iinfo
->i_lenExtents
=
509 (iinfo
->i_lenExtents
+ sb
->s_blocksize
- 1) &
510 ~(sb
->s_blocksize
- 1);
513 /* Last extent are just preallocated blocks? */
514 if ((last_ext
->extLength
& UDF_EXTENT_FLAG_MASK
) ==
515 EXT_NOT_RECORDED_ALLOCATED
) {
516 /* Save the extent so that we can reattach it to the end */
517 prealloc_loc
= last_ext
->extLocation
;
518 prealloc_len
= last_ext
->extLength
;
519 /* Mark the extent as a hole */
520 last_ext
->extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
|
521 (last_ext
->extLength
& UDF_EXTENT_LENGTH_MASK
);
522 last_ext
->extLocation
.logicalBlockNum
= 0;
523 last_ext
->extLocation
.partitionReferenceNum
= 0;
526 /* Can we merge with the previous extent? */
527 if ((last_ext
->extLength
& UDF_EXTENT_FLAG_MASK
) ==
528 EXT_NOT_RECORDED_NOT_ALLOCATED
) {
529 add
= (1 << 30) - sb
->s_blocksize
-
530 (last_ext
->extLength
& UDF_EXTENT_LENGTH_MASK
);
531 if (add
> new_block_bytes
)
532 add
= new_block_bytes
;
533 new_block_bytes
-= add
;
534 last_ext
->extLength
+= add
;
538 udf_add_aext(inode
, last_pos
, &last_ext
->extLocation
,
539 last_ext
->extLength
, 1);
542 struct kernel_lb_addr tmploc
;
545 udf_write_aext(inode
, last_pos
, &last_ext
->extLocation
,
546 last_ext
->extLength
, 1);
548 * We've rewritten the last extent but there may be empty
549 * indirect extent after it - enter it.
551 udf_next_aext(inode
, last_pos
, &tmploc
, &tmplen
, 0);
554 /* Managed to do everything necessary? */
555 if (!new_block_bytes
)
558 /* All further extents will be NOT_RECORDED_NOT_ALLOCATED */
559 last_ext
->extLocation
.logicalBlockNum
= 0;
560 last_ext
->extLocation
.partitionReferenceNum
= 0;
561 add
= (1 << 30) - sb
->s_blocksize
;
562 last_ext
->extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
| add
;
564 /* Create enough extents to cover the whole hole */
565 while (new_block_bytes
> add
) {
566 new_block_bytes
-= add
;
567 err
= udf_add_aext(inode
, last_pos
, &last_ext
->extLocation
,
568 last_ext
->extLength
, 1);
573 if (new_block_bytes
) {
574 last_ext
->extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
|
576 err
= udf_add_aext(inode
, last_pos
, &last_ext
->extLocation
,
577 last_ext
->extLength
, 1);
584 /* Do we have some preallocated blocks saved? */
586 err
= udf_add_aext(inode
, last_pos
, &prealloc_loc
,
590 last_ext
->extLocation
= prealloc_loc
;
591 last_ext
->extLength
= prealloc_len
;
595 /* last_pos should point to the last written extent... */
596 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
597 last_pos
->offset
-= sizeof(struct short_ad
);
598 else if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
599 last_pos
->offset
-= sizeof(struct long_ad
);
606 /* Extend the final block of the file to final_block_len bytes */
607 static void udf_do_extend_final_block(struct inode
*inode
,
608 struct extent_position
*last_pos
,
609 struct kernel_long_ad
*last_ext
,
610 uint32_t final_block_len
)
612 struct super_block
*sb
= inode
->i_sb
;
613 uint32_t added_bytes
;
615 added_bytes
= final_block_len
-
616 (last_ext
->extLength
& (sb
->s_blocksize
- 1));
617 last_ext
->extLength
+= added_bytes
;
618 UDF_I(inode
)->i_lenExtents
+= added_bytes
;
620 udf_write_aext(inode
, last_pos
, &last_ext
->extLocation
,
621 last_ext
->extLength
, 1);
624 static int udf_extend_file(struct inode
*inode
, loff_t newsize
)
627 struct extent_position epos
;
628 struct kernel_lb_addr eloc
;
631 struct super_block
*sb
= inode
->i_sb
;
632 sector_t first_block
= newsize
>> sb
->s_blocksize_bits
, offset
;
633 unsigned long partial_final_block
;
635 struct udf_inode_info
*iinfo
= UDF_I(inode
);
636 struct kernel_long_ad extent
;
638 int within_final_block
;
640 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
641 adsize
= sizeof(struct short_ad
);
642 else if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
643 adsize
= sizeof(struct long_ad
);
647 etype
= inode_bmap(inode
, first_block
, &epos
, &eloc
, &elen
, &offset
);
648 within_final_block
= (etype
!= -1);
650 if ((!epos
.bh
&& epos
.offset
== udf_file_entry_alloc_offset(inode
)) ||
651 (epos
.bh
&& epos
.offset
== sizeof(struct allocExtDesc
))) {
652 /* File has no extents at all or has empty last
653 * indirect extent! Create a fake extent... */
654 extent
.extLocation
.logicalBlockNum
= 0;
655 extent
.extLocation
.partitionReferenceNum
= 0;
656 extent
.extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
;
658 epos
.offset
-= adsize
;
659 etype
= udf_next_aext(inode
, &epos
, &extent
.extLocation
,
660 &extent
.extLength
, 0);
661 extent
.extLength
|= etype
<< 30;
664 partial_final_block
= newsize
& (sb
->s_blocksize
- 1);
666 /* File has extent covering the new size (could happen when extending
669 if (within_final_block
) {
670 /* Extending file within the last file block */
671 udf_do_extend_final_block(inode
, &epos
, &extent
,
672 partial_final_block
);
674 loff_t add
= ((loff_t
)offset
<< sb
->s_blocksize_bits
) |
676 err
= udf_do_extend_file(inode
, &epos
, &extent
, add
);
682 iinfo
->i_lenExtents
= newsize
;
688 static sector_t
inode_getblk(struct inode
*inode
, sector_t block
,
691 struct kernel_long_ad laarr
[EXTENT_MERGE_SIZE
];
692 struct extent_position prev_epos
, cur_epos
, next_epos
;
693 int count
= 0, startnum
= 0, endnum
= 0;
694 uint32_t elen
= 0, tmpelen
;
695 struct kernel_lb_addr eloc
, tmpeloc
;
697 loff_t lbcount
= 0, b_off
= 0;
698 udf_pblk_t newblocknum
, newblock
;
701 struct udf_inode_info
*iinfo
= UDF_I(inode
);
702 udf_pblk_t goal
= 0, pgoal
= iinfo
->i_location
.logicalBlockNum
;
708 prev_epos
.offset
= udf_file_entry_alloc_offset(inode
);
709 prev_epos
.block
= iinfo
->i_location
;
711 cur_epos
= next_epos
= prev_epos
;
712 b_off
= (loff_t
)block
<< inode
->i_sb
->s_blocksize_bits
;
714 /* find the extent which contains the block we are looking for.
715 alternate between laarr[0] and laarr[1] for locations of the
716 current extent, and the previous extent */
718 if (prev_epos
.bh
!= cur_epos
.bh
) {
719 brelse(prev_epos
.bh
);
721 prev_epos
.bh
= cur_epos
.bh
;
723 if (cur_epos
.bh
!= next_epos
.bh
) {
725 get_bh(next_epos
.bh
);
726 cur_epos
.bh
= next_epos
.bh
;
731 prev_epos
.block
= cur_epos
.block
;
732 cur_epos
.block
= next_epos
.block
;
734 prev_epos
.offset
= cur_epos
.offset
;
735 cur_epos
.offset
= next_epos
.offset
;
737 etype
= udf_next_aext(inode
, &next_epos
, &eloc
, &elen
, 1);
743 laarr
[c
].extLength
= (etype
<< 30) | elen
;
744 laarr
[c
].extLocation
= eloc
;
746 if (etype
!= (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30))
747 pgoal
= eloc
.logicalBlockNum
+
748 ((elen
+ inode
->i_sb
->s_blocksize
- 1) >>
749 inode
->i_sb
->s_blocksize_bits
);
752 } while (lbcount
+ elen
<= b_off
);
755 offset
= b_off
>> inode
->i_sb
->s_blocksize_bits
;
757 * Move prev_epos and cur_epos into indirect extent if we are at
760 udf_next_aext(inode
, &prev_epos
, &tmpeloc
, &tmpelen
, 0);
761 udf_next_aext(inode
, &cur_epos
, &tmpeloc
, &tmpelen
, 0);
763 /* if the extent is allocated and recorded, return the block
764 if the extent is not a multiple of the blocksize, round up */
766 if (etype
== (EXT_RECORDED_ALLOCATED
>> 30)) {
767 if (elen
& (inode
->i_sb
->s_blocksize
- 1)) {
768 elen
= EXT_RECORDED_ALLOCATED
|
769 ((elen
+ inode
->i_sb
->s_blocksize
- 1) &
770 ~(inode
->i_sb
->s_blocksize
- 1));
771 udf_write_aext(inode
, &cur_epos
, &eloc
, elen
, 1);
773 newblock
= udf_get_lb_pblock(inode
->i_sb
, &eloc
, offset
);
777 /* Are we beyond EOF? */
787 /* Create a fake extent when there's not one */
788 memset(&laarr
[0].extLocation
, 0x00,
789 sizeof(struct kernel_lb_addr
));
790 laarr
[0].extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
;
791 /* Will udf_do_extend_file() create real extent from
793 startnum
= (offset
> 0);
795 /* Create extents for the hole between EOF and offset */
796 hole_len
= (loff_t
)offset
<< inode
->i_blkbits
;
797 ret
= udf_do_extend_file(inode
, &prev_epos
, laarr
, hole_len
);
806 /* We are not covered by a preallocated extent? */
807 if ((laarr
[0].extLength
& UDF_EXTENT_FLAG_MASK
) !=
808 EXT_NOT_RECORDED_ALLOCATED
) {
809 /* Is there any real extent? - otherwise we overwrite
813 laarr
[c
].extLength
= EXT_NOT_RECORDED_NOT_ALLOCATED
|
814 inode
->i_sb
->s_blocksize
;
815 memset(&laarr
[c
].extLocation
, 0x00,
816 sizeof(struct kernel_lb_addr
));
823 endnum
= startnum
= ((count
> 2) ? 2 : count
);
825 /* if the current extent is in position 0,
826 swap it with the previous */
827 if (!c
&& count
!= 1) {
834 /* if the current block is located in an extent,
835 read the next extent */
836 etype
= udf_next_aext(inode
, &next_epos
, &eloc
, &elen
, 0);
838 laarr
[c
+ 1].extLength
= (etype
<< 30) | elen
;
839 laarr
[c
+ 1].extLocation
= eloc
;
847 /* if the current extent is not recorded but allocated, get the
848 * block in the extent corresponding to the requested block */
849 if ((laarr
[c
].extLength
>> 30) == (EXT_NOT_RECORDED_ALLOCATED
>> 30))
850 newblocknum
= laarr
[c
].extLocation
.logicalBlockNum
+ offset
;
851 else { /* otherwise, allocate a new block */
852 if (iinfo
->i_next_alloc_block
== block
)
853 goal
= iinfo
->i_next_alloc_goal
;
856 if (!(goal
= pgoal
)) /* XXX: what was intended here? */
857 goal
= iinfo
->i_location
.logicalBlockNum
+ 1;
860 newblocknum
= udf_new_block(inode
->i_sb
, inode
,
861 iinfo
->i_location
.partitionReferenceNum
,
869 iinfo
->i_lenExtents
+= inode
->i_sb
->s_blocksize
;
872 /* if the extent the requsted block is located in contains multiple
873 * blocks, split the extent into at most three extents. blocks prior
874 * to requested block, requested block, and blocks after requested
876 udf_split_extents(inode
, &c
, offset
, newblocknum
, laarr
, &endnum
);
878 /* We preallocate blocks only for regular files. It also makes sense
879 * for directories but there's a problem when to drop the
880 * preallocation. We might use some delayed work for that but I feel
881 * it's overengineering for a filesystem like UDF. */
882 if (S_ISREG(inode
->i_mode
))
883 udf_prealloc_extents(inode
, c
, lastblock
, laarr
, &endnum
);
885 /* merge any continuous blocks in laarr */
886 udf_merge_extents(inode
, laarr
, &endnum
);
888 /* write back the new extents, inserting new extents if the new number
889 * of extents is greater than the old number, and deleting extents if
890 * the new number of extents is less than the old number */
891 udf_update_extents(inode
, laarr
, startnum
, endnum
, &prev_epos
);
893 newblock
= udf_get_pblock(inode
->i_sb
, newblocknum
,
894 iinfo
->i_location
.partitionReferenceNum
, 0);
900 iinfo
->i_next_alloc_block
= block
;
901 iinfo
->i_next_alloc_goal
= newblocknum
;
902 inode
->i_ctime
= current_time(inode
);
905 udf_sync_inode(inode
);
907 mark_inode_dirty(inode
);
909 brelse(prev_epos
.bh
);
911 brelse(next_epos
.bh
);
915 static void udf_split_extents(struct inode
*inode
, int *c
, int offset
,
916 udf_pblk_t newblocknum
,
917 struct kernel_long_ad
*laarr
, int *endnum
)
919 unsigned long blocksize
= inode
->i_sb
->s_blocksize
;
920 unsigned char blocksize_bits
= inode
->i_sb
->s_blocksize_bits
;
922 if ((laarr
[*c
].extLength
>> 30) == (EXT_NOT_RECORDED_ALLOCATED
>> 30) ||
923 (laarr
[*c
].extLength
>> 30) ==
924 (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30)) {
926 int blen
= ((laarr
[curr
].extLength
& UDF_EXTENT_LENGTH_MASK
) +
927 blocksize
- 1) >> blocksize_bits
;
928 int8_t etype
= (laarr
[curr
].extLength
>> 30);
932 else if (!offset
|| blen
== offset
+ 1) {
933 laarr
[curr
+ 2] = laarr
[curr
+ 1];
934 laarr
[curr
+ 1] = laarr
[curr
];
936 laarr
[curr
+ 3] = laarr
[curr
+ 1];
937 laarr
[curr
+ 2] = laarr
[curr
+ 1] = laarr
[curr
];
941 if (etype
== (EXT_NOT_RECORDED_ALLOCATED
>> 30)) {
942 udf_free_blocks(inode
->i_sb
, inode
,
943 &laarr
[curr
].extLocation
,
945 laarr
[curr
].extLength
=
946 EXT_NOT_RECORDED_NOT_ALLOCATED
|
947 (offset
<< blocksize_bits
);
948 laarr
[curr
].extLocation
.logicalBlockNum
= 0;
949 laarr
[curr
].extLocation
.
950 partitionReferenceNum
= 0;
952 laarr
[curr
].extLength
= (etype
<< 30) |
953 (offset
<< blocksize_bits
);
959 laarr
[curr
].extLocation
.logicalBlockNum
= newblocknum
;
960 if (etype
== (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30))
961 laarr
[curr
].extLocation
.partitionReferenceNum
=
962 UDF_I(inode
)->i_location
.partitionReferenceNum
;
963 laarr
[curr
].extLength
= EXT_RECORDED_ALLOCATED
|
967 if (blen
!= offset
+ 1) {
968 if (etype
== (EXT_NOT_RECORDED_ALLOCATED
>> 30))
969 laarr
[curr
].extLocation
.logicalBlockNum
+=
971 laarr
[curr
].extLength
= (etype
<< 30) |
972 ((blen
- (offset
+ 1)) << blocksize_bits
);
979 static void udf_prealloc_extents(struct inode
*inode
, int c
, int lastblock
,
980 struct kernel_long_ad
*laarr
,
983 int start
, length
= 0, currlength
= 0, i
;
985 if (*endnum
>= (c
+ 1)) {
991 if ((laarr
[c
+ 1].extLength
>> 30) ==
992 (EXT_NOT_RECORDED_ALLOCATED
>> 30)) {
994 length
= currlength
=
995 (((laarr
[c
+ 1].extLength
&
996 UDF_EXTENT_LENGTH_MASK
) +
997 inode
->i_sb
->s_blocksize
- 1) >>
998 inode
->i_sb
->s_blocksize_bits
);
1003 for (i
= start
+ 1; i
<= *endnum
; i
++) {
1006 length
+= UDF_DEFAULT_PREALLOC_BLOCKS
;
1007 } else if ((laarr
[i
].extLength
>> 30) ==
1008 (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30)) {
1009 length
+= (((laarr
[i
].extLength
&
1010 UDF_EXTENT_LENGTH_MASK
) +
1011 inode
->i_sb
->s_blocksize
- 1) >>
1012 inode
->i_sb
->s_blocksize_bits
);
1018 int next
= laarr
[start
].extLocation
.logicalBlockNum
+
1019 (((laarr
[start
].extLength
& UDF_EXTENT_LENGTH_MASK
) +
1020 inode
->i_sb
->s_blocksize
- 1) >>
1021 inode
->i_sb
->s_blocksize_bits
);
1022 int numalloc
= udf_prealloc_blocks(inode
->i_sb
, inode
,
1023 laarr
[start
].extLocation
.partitionReferenceNum
,
1024 next
, (UDF_DEFAULT_PREALLOC_BLOCKS
> length
?
1025 length
: UDF_DEFAULT_PREALLOC_BLOCKS
) -
1028 if (start
== (c
+ 1))
1029 laarr
[start
].extLength
+=
1031 inode
->i_sb
->s_blocksize_bits
);
1033 memmove(&laarr
[c
+ 2], &laarr
[c
+ 1],
1034 sizeof(struct long_ad
) * (*endnum
- (c
+ 1)));
1036 laarr
[c
+ 1].extLocation
.logicalBlockNum
= next
;
1037 laarr
[c
+ 1].extLocation
.partitionReferenceNum
=
1038 laarr
[c
].extLocation
.
1039 partitionReferenceNum
;
1040 laarr
[c
+ 1].extLength
=
1041 EXT_NOT_RECORDED_ALLOCATED
|
1043 inode
->i_sb
->s_blocksize_bits
);
1047 for (i
= start
+ 1; numalloc
&& i
< *endnum
; i
++) {
1048 int elen
= ((laarr
[i
].extLength
&
1049 UDF_EXTENT_LENGTH_MASK
) +
1050 inode
->i_sb
->s_blocksize
- 1) >>
1051 inode
->i_sb
->s_blocksize_bits
;
1053 if (elen
> numalloc
) {
1054 laarr
[i
].extLength
-=
1056 inode
->i_sb
->s_blocksize_bits
);
1060 if (*endnum
> (i
+ 1))
1063 sizeof(struct long_ad
) *
1064 (*endnum
- (i
+ 1)));
1069 UDF_I(inode
)->i_lenExtents
+=
1070 numalloc
<< inode
->i_sb
->s_blocksize_bits
;
1075 static void udf_merge_extents(struct inode
*inode
, struct kernel_long_ad
*laarr
,
1079 unsigned long blocksize
= inode
->i_sb
->s_blocksize
;
1080 unsigned char blocksize_bits
= inode
->i_sb
->s_blocksize_bits
;
1082 for (i
= 0; i
< (*endnum
- 1); i
++) {
1083 struct kernel_long_ad
*li
/*l[i]*/ = &laarr
[i
];
1084 struct kernel_long_ad
*lip1
/*l[i plus 1]*/ = &laarr
[i
+ 1];
1086 if (((li
->extLength
>> 30) == (lip1
->extLength
>> 30)) &&
1087 (((li
->extLength
>> 30) ==
1088 (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30)) ||
1089 ((lip1
->extLocation
.logicalBlockNum
-
1090 li
->extLocation
.logicalBlockNum
) ==
1091 (((li
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
1092 blocksize
- 1) >> blocksize_bits
)))) {
1094 if (((li
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
1095 (lip1
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
1096 blocksize
- 1) & ~UDF_EXTENT_LENGTH_MASK
) {
1097 lip1
->extLength
= (lip1
->extLength
-
1099 UDF_EXTENT_LENGTH_MASK
) +
1100 UDF_EXTENT_LENGTH_MASK
) &
1102 li
->extLength
= (li
->extLength
&
1103 UDF_EXTENT_FLAG_MASK
) +
1104 (UDF_EXTENT_LENGTH_MASK
+ 1) -
1106 lip1
->extLocation
.logicalBlockNum
=
1107 li
->extLocation
.logicalBlockNum
+
1109 UDF_EXTENT_LENGTH_MASK
) >>
1112 li
->extLength
= lip1
->extLength
+
1114 UDF_EXTENT_LENGTH_MASK
) +
1115 blocksize
- 1) & ~(blocksize
- 1));
1116 if (*endnum
> (i
+ 2))
1117 memmove(&laarr
[i
+ 1], &laarr
[i
+ 2],
1118 sizeof(struct long_ad
) *
1119 (*endnum
- (i
+ 2)));
1123 } else if (((li
->extLength
>> 30) ==
1124 (EXT_NOT_RECORDED_ALLOCATED
>> 30)) &&
1125 ((lip1
->extLength
>> 30) ==
1126 (EXT_NOT_RECORDED_NOT_ALLOCATED
>> 30))) {
1127 udf_free_blocks(inode
->i_sb
, inode
, &li
->extLocation
, 0,
1129 UDF_EXTENT_LENGTH_MASK
) +
1130 blocksize
- 1) >> blocksize_bits
);
1131 li
->extLocation
.logicalBlockNum
= 0;
1132 li
->extLocation
.partitionReferenceNum
= 0;
1134 if (((li
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
1135 (lip1
->extLength
& UDF_EXTENT_LENGTH_MASK
) +
1136 blocksize
- 1) & ~UDF_EXTENT_LENGTH_MASK
) {
1137 lip1
->extLength
= (lip1
->extLength
-
1139 UDF_EXTENT_LENGTH_MASK
) +
1140 UDF_EXTENT_LENGTH_MASK
) &
1142 li
->extLength
= (li
->extLength
&
1143 UDF_EXTENT_FLAG_MASK
) +
1144 (UDF_EXTENT_LENGTH_MASK
+ 1) -
1147 li
->extLength
= lip1
->extLength
+
1149 UDF_EXTENT_LENGTH_MASK
) +
1150 blocksize
- 1) & ~(blocksize
- 1));
1151 if (*endnum
> (i
+ 2))
1152 memmove(&laarr
[i
+ 1], &laarr
[i
+ 2],
1153 sizeof(struct long_ad
) *
1154 (*endnum
- (i
+ 2)));
1158 } else if ((li
->extLength
>> 30) ==
1159 (EXT_NOT_RECORDED_ALLOCATED
>> 30)) {
1160 udf_free_blocks(inode
->i_sb
, inode
,
1161 &li
->extLocation
, 0,
1163 UDF_EXTENT_LENGTH_MASK
) +
1164 blocksize
- 1) >> blocksize_bits
);
1165 li
->extLocation
.logicalBlockNum
= 0;
1166 li
->extLocation
.partitionReferenceNum
= 0;
1167 li
->extLength
= (li
->extLength
&
1168 UDF_EXTENT_LENGTH_MASK
) |
1169 EXT_NOT_RECORDED_NOT_ALLOCATED
;
1174 static void udf_update_extents(struct inode
*inode
, struct kernel_long_ad
*laarr
,
1175 int startnum
, int endnum
,
1176 struct extent_position
*epos
)
1179 struct kernel_lb_addr tmploc
;
1182 if (startnum
> endnum
) {
1183 for (i
= 0; i
< (startnum
- endnum
); i
++)
1184 udf_delete_aext(inode
, *epos
);
1185 } else if (startnum
< endnum
) {
1186 for (i
= 0; i
< (endnum
- startnum
); i
++) {
1187 udf_insert_aext(inode
, *epos
, laarr
[i
].extLocation
,
1188 laarr
[i
].extLength
);
1189 udf_next_aext(inode
, epos
, &laarr
[i
].extLocation
,
1190 &laarr
[i
].extLength
, 1);
1195 for (i
= start
; i
< endnum
; i
++) {
1196 udf_next_aext(inode
, epos
, &tmploc
, &tmplen
, 0);
1197 udf_write_aext(inode
, epos
, &laarr
[i
].extLocation
,
1198 laarr
[i
].extLength
, 1);
1202 struct buffer_head
*udf_bread(struct inode
*inode
, udf_pblk_t block
,
1203 int create
, int *err
)
1205 struct buffer_head
*bh
= NULL
;
1207 bh
= udf_getblk(inode
, block
, create
, err
);
1211 if (buffer_uptodate(bh
))
1214 ll_rw_block(REQ_OP_READ
, 0, 1, &bh
);
1217 if (buffer_uptodate(bh
))
1225 int udf_setsize(struct inode
*inode
, loff_t newsize
)
1228 struct udf_inode_info
*iinfo
;
1229 unsigned int bsize
= i_blocksize(inode
);
1231 if (!(S_ISREG(inode
->i_mode
) || S_ISDIR(inode
->i_mode
) ||
1232 S_ISLNK(inode
->i_mode
)))
1234 if (IS_APPEND(inode
) || IS_IMMUTABLE(inode
))
1237 iinfo
= UDF_I(inode
);
1238 if (newsize
> inode
->i_size
) {
1239 down_write(&iinfo
->i_data_sem
);
1240 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_IN_ICB
) {
1242 (udf_file_entry_alloc_offset(inode
) + newsize
)) {
1243 err
= udf_expand_file_adinicb(inode
);
1246 down_write(&iinfo
->i_data_sem
);
1248 iinfo
->i_lenAlloc
= newsize
;
1252 err
= udf_extend_file(inode
, newsize
);
1254 up_write(&iinfo
->i_data_sem
);
1258 up_write(&iinfo
->i_data_sem
);
1259 truncate_setsize(inode
, newsize
);
1261 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_IN_ICB
) {
1262 down_write(&iinfo
->i_data_sem
);
1263 udf_clear_extent_cache(inode
);
1264 memset(iinfo
->i_ext
.i_data
+ iinfo
->i_lenEAttr
+ newsize
,
1265 0x00, bsize
- newsize
-
1266 udf_file_entry_alloc_offset(inode
));
1267 iinfo
->i_lenAlloc
= newsize
;
1268 truncate_setsize(inode
, newsize
);
1269 up_write(&iinfo
->i_data_sem
);
1272 err
= block_truncate_page(inode
->i_mapping
, newsize
,
1276 truncate_setsize(inode
, newsize
);
1277 down_write(&iinfo
->i_data_sem
);
1278 udf_clear_extent_cache(inode
);
1279 err
= udf_truncate_extents(inode
);
1280 up_write(&iinfo
->i_data_sem
);
1285 inode
->i_mtime
= inode
->i_ctime
= current_time(inode
);
1287 udf_sync_inode(inode
);
1289 mark_inode_dirty(inode
);
1294 * Maximum length of linked list formed by ICB hierarchy. The chosen number is
1295 * arbitrary - just that we hopefully don't limit any real use of rewritten
1296 * inode on write-once media but avoid looping for too long on corrupted media.
1298 #define UDF_MAX_ICB_NESTING 1024
1300 static int udf_read_inode(struct inode
*inode
, bool hidden_inode
)
1302 struct buffer_head
*bh
= NULL
;
1303 struct fileEntry
*fe
;
1304 struct extendedFileEntry
*efe
;
1306 struct udf_inode_info
*iinfo
= UDF_I(inode
);
1307 struct udf_sb_info
*sbi
= UDF_SB(inode
->i_sb
);
1308 struct kernel_lb_addr
*iloc
= &iinfo
->i_location
;
1309 unsigned int link_count
;
1310 unsigned int indirections
= 0;
1311 int bs
= inode
->i_sb
->s_blocksize
;
1316 if (iloc
->partitionReferenceNum
>= sbi
->s_partitions
) {
1317 udf_debug("partition reference: %u > logical volume partitions: %u\n",
1318 iloc
->partitionReferenceNum
, sbi
->s_partitions
);
1322 if (iloc
->logicalBlockNum
>=
1323 sbi
->s_partmaps
[iloc
->partitionReferenceNum
].s_partition_len
) {
1324 udf_debug("block=%u, partition=%u out of range\n",
1325 iloc
->logicalBlockNum
, iloc
->partitionReferenceNum
);
1330 * Set defaults, but the inode is still incomplete!
1331 * Note: get_new_inode() sets the following on a new inode:
1334 * i_flags = sb->s_flags
1336 * clean_inode(): zero fills and sets
1341 bh
= udf_read_ptagged(inode
->i_sb
, iloc
, 0, &ident
);
1343 udf_err(inode
->i_sb
, "(ino %lu) failed !bh\n", inode
->i_ino
);
1347 if (ident
!= TAG_IDENT_FE
&& ident
!= TAG_IDENT_EFE
&&
1348 ident
!= TAG_IDENT_USE
) {
1349 udf_err(inode
->i_sb
, "(ino %lu) failed ident=%u\n",
1350 inode
->i_ino
, ident
);
1354 fe
= (struct fileEntry
*)bh
->b_data
;
1355 efe
= (struct extendedFileEntry
*)bh
->b_data
;
1357 if (fe
->icbTag
.strategyType
== cpu_to_le16(4096)) {
1358 struct buffer_head
*ibh
;
1360 ibh
= udf_read_ptagged(inode
->i_sb
, iloc
, 1, &ident
);
1361 if (ident
== TAG_IDENT_IE
&& ibh
) {
1362 struct kernel_lb_addr loc
;
1363 struct indirectEntry
*ie
;
1365 ie
= (struct indirectEntry
*)ibh
->b_data
;
1366 loc
= lelb_to_cpu(ie
->indirectICB
.extLocation
);
1368 if (ie
->indirectICB
.extLength
) {
1370 memcpy(&iinfo
->i_location
, &loc
,
1371 sizeof(struct kernel_lb_addr
));
1372 if (++indirections
> UDF_MAX_ICB_NESTING
) {
1373 udf_err(inode
->i_sb
,
1374 "too many ICBs in ICB hierarchy"
1375 " (max %d supported)\n",
1376 UDF_MAX_ICB_NESTING
);
1384 } else if (fe
->icbTag
.strategyType
!= cpu_to_le16(4)) {
1385 udf_err(inode
->i_sb
, "unsupported strategy type: %u\n",
1386 le16_to_cpu(fe
->icbTag
.strategyType
));
1389 if (fe
->icbTag
.strategyType
== cpu_to_le16(4))
1390 iinfo
->i_strat4096
= 0;
1391 else /* if (fe->icbTag.strategyType == cpu_to_le16(4096)) */
1392 iinfo
->i_strat4096
= 1;
1394 iinfo
->i_alloc_type
= le16_to_cpu(fe
->icbTag
.flags
) &
1395 ICBTAG_FLAG_AD_MASK
;
1396 if (iinfo
->i_alloc_type
!= ICBTAG_FLAG_AD_SHORT
&&
1397 iinfo
->i_alloc_type
!= ICBTAG_FLAG_AD_LONG
&&
1398 iinfo
->i_alloc_type
!= ICBTAG_FLAG_AD_IN_ICB
) {
1402 iinfo
->i_unique
= 0;
1403 iinfo
->i_lenEAttr
= 0;
1404 iinfo
->i_lenExtents
= 0;
1405 iinfo
->i_lenAlloc
= 0;
1406 iinfo
->i_next_alloc_block
= 0;
1407 iinfo
->i_next_alloc_goal
= 0;
1408 if (fe
->descTag
.tagIdent
== cpu_to_le16(TAG_IDENT_EFE
)) {
1411 ret
= udf_alloc_i_data(inode
, bs
-
1412 sizeof(struct extendedFileEntry
));
1415 memcpy(iinfo
->i_ext
.i_data
,
1416 bh
->b_data
+ sizeof(struct extendedFileEntry
),
1417 bs
- sizeof(struct extendedFileEntry
));
1418 } else if (fe
->descTag
.tagIdent
== cpu_to_le16(TAG_IDENT_FE
)) {
1421 ret
= udf_alloc_i_data(inode
, bs
- sizeof(struct fileEntry
));
1424 memcpy(iinfo
->i_ext
.i_data
,
1425 bh
->b_data
+ sizeof(struct fileEntry
),
1426 bs
- sizeof(struct fileEntry
));
1427 } else if (fe
->descTag
.tagIdent
== cpu_to_le16(TAG_IDENT_USE
)) {
1430 iinfo
->i_lenAlloc
= le32_to_cpu(
1431 ((struct unallocSpaceEntry
*)bh
->b_data
)->
1433 ret
= udf_alloc_i_data(inode
, bs
-
1434 sizeof(struct unallocSpaceEntry
));
1437 memcpy(iinfo
->i_ext
.i_data
,
1438 bh
->b_data
+ sizeof(struct unallocSpaceEntry
),
1439 bs
- sizeof(struct unallocSpaceEntry
));
1444 read_lock(&sbi
->s_cred_lock
);
1445 uid
= le32_to_cpu(fe
->uid
);
1446 if (uid
== UDF_INVALID_ID
||
1447 UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_UID_SET
))
1448 inode
->i_uid
= sbi
->s_uid
;
1450 i_uid_write(inode
, uid
);
1452 gid
= le32_to_cpu(fe
->gid
);
1453 if (gid
== UDF_INVALID_ID
||
1454 UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_GID_SET
))
1455 inode
->i_gid
= sbi
->s_gid
;
1457 i_gid_write(inode
, gid
);
1459 if (fe
->icbTag
.fileType
!= ICBTAG_FILE_TYPE_DIRECTORY
&&
1460 sbi
->s_fmode
!= UDF_INVALID_MODE
)
1461 inode
->i_mode
= sbi
->s_fmode
;
1462 else if (fe
->icbTag
.fileType
== ICBTAG_FILE_TYPE_DIRECTORY
&&
1463 sbi
->s_dmode
!= UDF_INVALID_MODE
)
1464 inode
->i_mode
= sbi
->s_dmode
;
1466 inode
->i_mode
= udf_convert_permissions(fe
);
1467 inode
->i_mode
&= ~sbi
->s_umask
;
1468 iinfo
->i_extraPerms
= le32_to_cpu(fe
->permissions
) & ~FE_MAPPED_PERMS
;
1470 read_unlock(&sbi
->s_cred_lock
);
1472 link_count
= le16_to_cpu(fe
->fileLinkCount
);
1474 if (!hidden_inode
) {
1480 set_nlink(inode
, link_count
);
1482 inode
->i_size
= le64_to_cpu(fe
->informationLength
);
1483 iinfo
->i_lenExtents
= inode
->i_size
;
1485 if (iinfo
->i_efe
== 0) {
1486 inode
->i_blocks
= le64_to_cpu(fe
->logicalBlocksRecorded
) <<
1487 (inode
->i_sb
->s_blocksize_bits
- 9);
1489 udf_disk_stamp_to_time(&inode
->i_atime
, fe
->accessTime
);
1490 udf_disk_stamp_to_time(&inode
->i_mtime
, fe
->modificationTime
);
1491 udf_disk_stamp_to_time(&inode
->i_ctime
, fe
->attrTime
);
1493 iinfo
->i_unique
= le64_to_cpu(fe
->uniqueID
);
1494 iinfo
->i_lenEAttr
= le32_to_cpu(fe
->lengthExtendedAttr
);
1495 iinfo
->i_lenAlloc
= le32_to_cpu(fe
->lengthAllocDescs
);
1496 iinfo
->i_checkpoint
= le32_to_cpu(fe
->checkpoint
);
1497 iinfo
->i_streamdir
= 0;
1498 iinfo
->i_lenStreams
= 0;
1500 inode
->i_blocks
= le64_to_cpu(efe
->logicalBlocksRecorded
) <<
1501 (inode
->i_sb
->s_blocksize_bits
- 9);
1503 udf_disk_stamp_to_time(&inode
->i_atime
, efe
->accessTime
);
1504 udf_disk_stamp_to_time(&inode
->i_mtime
, efe
->modificationTime
);
1505 udf_disk_stamp_to_time(&iinfo
->i_crtime
, efe
->createTime
);
1506 udf_disk_stamp_to_time(&inode
->i_ctime
, efe
->attrTime
);
1508 iinfo
->i_unique
= le64_to_cpu(efe
->uniqueID
);
1509 iinfo
->i_lenEAttr
= le32_to_cpu(efe
->lengthExtendedAttr
);
1510 iinfo
->i_lenAlloc
= le32_to_cpu(efe
->lengthAllocDescs
);
1511 iinfo
->i_checkpoint
= le32_to_cpu(efe
->checkpoint
);
1514 iinfo
->i_streamdir
= (efe
->streamDirectoryICB
.extLength
!= 0);
1515 iinfo
->i_locStreamdir
=
1516 lelb_to_cpu(efe
->streamDirectoryICB
.extLocation
);
1517 iinfo
->i_lenStreams
= le64_to_cpu(efe
->objectSize
);
1518 if (iinfo
->i_lenStreams
>= inode
->i_size
)
1519 iinfo
->i_lenStreams
-= inode
->i_size
;
1521 iinfo
->i_lenStreams
= 0;
1523 inode
->i_generation
= iinfo
->i_unique
;
1526 * Sanity check length of allocation descriptors and extended attrs to
1527 * avoid integer overflows
1529 if (iinfo
->i_lenEAttr
> bs
|| iinfo
->i_lenAlloc
> bs
)
1531 /* Now do exact checks */
1532 if (udf_file_entry_alloc_offset(inode
) + iinfo
->i_lenAlloc
> bs
)
1534 /* Sanity checks for files in ICB so that we don't get confused later */
1535 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_IN_ICB
) {
1537 * For file in ICB data is stored in allocation descriptor
1538 * so sizes should match
1540 if (iinfo
->i_lenAlloc
!= inode
->i_size
)
1542 /* File in ICB has to fit in there... */
1543 if (inode
->i_size
> bs
- udf_file_entry_alloc_offset(inode
))
1547 switch (fe
->icbTag
.fileType
) {
1548 case ICBTAG_FILE_TYPE_DIRECTORY
:
1549 inode
->i_op
= &udf_dir_inode_operations
;
1550 inode
->i_fop
= &udf_dir_operations
;
1551 inode
->i_mode
|= S_IFDIR
;
1554 case ICBTAG_FILE_TYPE_REALTIME
:
1555 case ICBTAG_FILE_TYPE_REGULAR
:
1556 case ICBTAG_FILE_TYPE_UNDEF
:
1557 case ICBTAG_FILE_TYPE_VAT20
:
1558 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_IN_ICB
)
1559 inode
->i_data
.a_ops
= &udf_adinicb_aops
;
1561 inode
->i_data
.a_ops
= &udf_aops
;
1562 inode
->i_op
= &udf_file_inode_operations
;
1563 inode
->i_fop
= &udf_file_operations
;
1564 inode
->i_mode
|= S_IFREG
;
1566 case ICBTAG_FILE_TYPE_BLOCK
:
1567 inode
->i_mode
|= S_IFBLK
;
1569 case ICBTAG_FILE_TYPE_CHAR
:
1570 inode
->i_mode
|= S_IFCHR
;
1572 case ICBTAG_FILE_TYPE_FIFO
:
1573 init_special_inode(inode
, inode
->i_mode
| S_IFIFO
, 0);
1575 case ICBTAG_FILE_TYPE_SOCKET
:
1576 init_special_inode(inode
, inode
->i_mode
| S_IFSOCK
, 0);
1578 case ICBTAG_FILE_TYPE_SYMLINK
:
1579 inode
->i_data
.a_ops
= &udf_symlink_aops
;
1580 inode
->i_op
= &udf_symlink_inode_operations
;
1581 inode_nohighmem(inode
);
1582 inode
->i_mode
= S_IFLNK
| 0777;
1584 case ICBTAG_FILE_TYPE_MAIN
:
1585 udf_debug("METADATA FILE-----\n");
1587 case ICBTAG_FILE_TYPE_MIRROR
:
1588 udf_debug("METADATA MIRROR FILE-----\n");
1590 case ICBTAG_FILE_TYPE_BITMAP
:
1591 udf_debug("METADATA BITMAP FILE-----\n");
1594 udf_err(inode
->i_sb
, "(ino %lu) failed unknown file type=%u\n",
1595 inode
->i_ino
, fe
->icbTag
.fileType
);
1598 if (S_ISCHR(inode
->i_mode
) || S_ISBLK(inode
->i_mode
)) {
1599 struct deviceSpec
*dsea
=
1600 (struct deviceSpec
*)udf_get_extendedattr(inode
, 12, 1);
1602 init_special_inode(inode
, inode
->i_mode
,
1603 MKDEV(le32_to_cpu(dsea
->majorDeviceIdent
),
1604 le32_to_cpu(dsea
->minorDeviceIdent
)));
1605 /* Developer ID ??? */
1615 static int udf_alloc_i_data(struct inode
*inode
, size_t size
)
1617 struct udf_inode_info
*iinfo
= UDF_I(inode
);
1618 iinfo
->i_ext
.i_data
= kmalloc(size
, GFP_KERNEL
);
1619 if (!iinfo
->i_ext
.i_data
)
1624 static umode_t
udf_convert_permissions(struct fileEntry
*fe
)
1627 uint32_t permissions
;
1630 permissions
= le32_to_cpu(fe
->permissions
);
1631 flags
= le16_to_cpu(fe
->icbTag
.flags
);
1633 mode
= ((permissions
) & 0007) |
1634 ((permissions
>> 2) & 0070) |
1635 ((permissions
>> 4) & 0700) |
1636 ((flags
& ICBTAG_FLAG_SETUID
) ? S_ISUID
: 0) |
1637 ((flags
& ICBTAG_FLAG_SETGID
) ? S_ISGID
: 0) |
1638 ((flags
& ICBTAG_FLAG_STICKY
) ? S_ISVTX
: 0);
1643 void udf_update_extra_perms(struct inode
*inode
, umode_t mode
)
1645 struct udf_inode_info
*iinfo
= UDF_I(inode
);
1648 * UDF 2.01 sec. 3.3.3.3 Note 2:
1649 * In Unix, delete permission tracks write
1651 iinfo
->i_extraPerms
&= ~FE_DELETE_PERMS
;
1653 iinfo
->i_extraPerms
|= FE_PERM_U_DELETE
;
1655 iinfo
->i_extraPerms
|= FE_PERM_G_DELETE
;
1657 iinfo
->i_extraPerms
|= FE_PERM_O_DELETE
;
1660 int udf_write_inode(struct inode
*inode
, struct writeback_control
*wbc
)
1662 return udf_update_inode(inode
, wbc
->sync_mode
== WB_SYNC_ALL
);
1665 static int udf_sync_inode(struct inode
*inode
)
1667 return udf_update_inode(inode
, 1);
1670 static void udf_adjust_time(struct udf_inode_info
*iinfo
, struct timespec64 time
)
1672 if (iinfo
->i_crtime
.tv_sec
> time
.tv_sec
||
1673 (iinfo
->i_crtime
.tv_sec
== time
.tv_sec
&&
1674 iinfo
->i_crtime
.tv_nsec
> time
.tv_nsec
))
1675 iinfo
->i_crtime
= time
;
1678 static int udf_update_inode(struct inode
*inode
, int do_sync
)
1680 struct buffer_head
*bh
= NULL
;
1681 struct fileEntry
*fe
;
1682 struct extendedFileEntry
*efe
;
1683 uint64_t lb_recorded
;
1688 struct udf_sb_info
*sbi
= UDF_SB(inode
->i_sb
);
1689 unsigned char blocksize_bits
= inode
->i_sb
->s_blocksize_bits
;
1690 struct udf_inode_info
*iinfo
= UDF_I(inode
);
1692 bh
= udf_tgetblk(inode
->i_sb
,
1693 udf_get_lb_pblock(inode
->i_sb
, &iinfo
->i_location
, 0));
1695 udf_debug("getblk failure\n");
1700 memset(bh
->b_data
, 0, inode
->i_sb
->s_blocksize
);
1701 fe
= (struct fileEntry
*)bh
->b_data
;
1702 efe
= (struct extendedFileEntry
*)bh
->b_data
;
1705 struct unallocSpaceEntry
*use
=
1706 (struct unallocSpaceEntry
*)bh
->b_data
;
1708 use
->lengthAllocDescs
= cpu_to_le32(iinfo
->i_lenAlloc
);
1709 memcpy(bh
->b_data
+ sizeof(struct unallocSpaceEntry
),
1710 iinfo
->i_ext
.i_data
, inode
->i_sb
->s_blocksize
-
1711 sizeof(struct unallocSpaceEntry
));
1712 use
->descTag
.tagIdent
= cpu_to_le16(TAG_IDENT_USE
);
1713 crclen
= sizeof(struct unallocSpaceEntry
);
1718 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_UID_FORGET
))
1719 fe
->uid
= cpu_to_le32(UDF_INVALID_ID
);
1721 fe
->uid
= cpu_to_le32(i_uid_read(inode
));
1723 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_GID_FORGET
))
1724 fe
->gid
= cpu_to_le32(UDF_INVALID_ID
);
1726 fe
->gid
= cpu_to_le32(i_gid_read(inode
));
1728 udfperms
= ((inode
->i_mode
& 0007)) |
1729 ((inode
->i_mode
& 0070) << 2) |
1730 ((inode
->i_mode
& 0700) << 4);
1732 udfperms
|= iinfo
->i_extraPerms
;
1733 fe
->permissions
= cpu_to_le32(udfperms
);
1735 if (S_ISDIR(inode
->i_mode
) && inode
->i_nlink
> 0)
1736 fe
->fileLinkCount
= cpu_to_le16(inode
->i_nlink
- 1);
1738 fe
->fileLinkCount
= cpu_to_le16(inode
->i_nlink
);
1740 fe
->informationLength
= cpu_to_le64(inode
->i_size
);
1742 if (S_ISCHR(inode
->i_mode
) || S_ISBLK(inode
->i_mode
)) {
1744 struct deviceSpec
*dsea
=
1745 (struct deviceSpec
*)udf_get_extendedattr(inode
, 12, 1);
1747 dsea
= (struct deviceSpec
*)
1748 udf_add_extendedattr(inode
,
1749 sizeof(struct deviceSpec
) +
1750 sizeof(struct regid
), 12, 0x3);
1751 dsea
->attrType
= cpu_to_le32(12);
1752 dsea
->attrSubtype
= 1;
1753 dsea
->attrLength
= cpu_to_le32(
1754 sizeof(struct deviceSpec
) +
1755 sizeof(struct regid
));
1756 dsea
->impUseLength
= cpu_to_le32(sizeof(struct regid
));
1758 eid
= (struct regid
*)dsea
->impUse
;
1759 memset(eid
, 0, sizeof(*eid
));
1760 strcpy(eid
->ident
, UDF_ID_DEVELOPER
);
1761 eid
->identSuffix
[0] = UDF_OS_CLASS_UNIX
;
1762 eid
->identSuffix
[1] = UDF_OS_ID_LINUX
;
1763 dsea
->majorDeviceIdent
= cpu_to_le32(imajor(inode
));
1764 dsea
->minorDeviceIdent
= cpu_to_le32(iminor(inode
));
1767 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_IN_ICB
)
1768 lb_recorded
= 0; /* No extents => no blocks! */
1771 (inode
->i_blocks
+ (1 << (blocksize_bits
- 9)) - 1) >>
1772 (blocksize_bits
- 9);
1774 if (iinfo
->i_efe
== 0) {
1775 memcpy(bh
->b_data
+ sizeof(struct fileEntry
),
1776 iinfo
->i_ext
.i_data
,
1777 inode
->i_sb
->s_blocksize
- sizeof(struct fileEntry
));
1778 fe
->logicalBlocksRecorded
= cpu_to_le64(lb_recorded
);
1780 udf_time_to_disk_stamp(&fe
->accessTime
, inode
->i_atime
);
1781 udf_time_to_disk_stamp(&fe
->modificationTime
, inode
->i_mtime
);
1782 udf_time_to_disk_stamp(&fe
->attrTime
, inode
->i_ctime
);
1783 memset(&(fe
->impIdent
), 0, sizeof(struct regid
));
1784 strcpy(fe
->impIdent
.ident
, UDF_ID_DEVELOPER
);
1785 fe
->impIdent
.identSuffix
[0] = UDF_OS_CLASS_UNIX
;
1786 fe
->impIdent
.identSuffix
[1] = UDF_OS_ID_LINUX
;
1787 fe
->uniqueID
= cpu_to_le64(iinfo
->i_unique
);
1788 fe
->lengthExtendedAttr
= cpu_to_le32(iinfo
->i_lenEAttr
);
1789 fe
->lengthAllocDescs
= cpu_to_le32(iinfo
->i_lenAlloc
);
1790 fe
->checkpoint
= cpu_to_le32(iinfo
->i_checkpoint
);
1791 fe
->descTag
.tagIdent
= cpu_to_le16(TAG_IDENT_FE
);
1792 crclen
= sizeof(struct fileEntry
);
1794 memcpy(bh
->b_data
+ sizeof(struct extendedFileEntry
),
1795 iinfo
->i_ext
.i_data
,
1796 inode
->i_sb
->s_blocksize
-
1797 sizeof(struct extendedFileEntry
));
1799 cpu_to_le64(inode
->i_size
+ iinfo
->i_lenStreams
);
1800 efe
->logicalBlocksRecorded
= cpu_to_le64(lb_recorded
);
1802 if (iinfo
->i_streamdir
) {
1803 struct long_ad
*icb_lad
= &efe
->streamDirectoryICB
;
1805 icb_lad
->extLocation
=
1806 cpu_to_lelb(iinfo
->i_locStreamdir
);
1807 icb_lad
->extLength
=
1808 cpu_to_le32(inode
->i_sb
->s_blocksize
);
1811 udf_adjust_time(iinfo
, inode
->i_atime
);
1812 udf_adjust_time(iinfo
, inode
->i_mtime
);
1813 udf_adjust_time(iinfo
, inode
->i_ctime
);
1815 udf_time_to_disk_stamp(&efe
->accessTime
, inode
->i_atime
);
1816 udf_time_to_disk_stamp(&efe
->modificationTime
, inode
->i_mtime
);
1817 udf_time_to_disk_stamp(&efe
->createTime
, iinfo
->i_crtime
);
1818 udf_time_to_disk_stamp(&efe
->attrTime
, inode
->i_ctime
);
1820 memset(&(efe
->impIdent
), 0, sizeof(efe
->impIdent
));
1821 strcpy(efe
->impIdent
.ident
, UDF_ID_DEVELOPER
);
1822 efe
->impIdent
.identSuffix
[0] = UDF_OS_CLASS_UNIX
;
1823 efe
->impIdent
.identSuffix
[1] = UDF_OS_ID_LINUX
;
1824 efe
->uniqueID
= cpu_to_le64(iinfo
->i_unique
);
1825 efe
->lengthExtendedAttr
= cpu_to_le32(iinfo
->i_lenEAttr
);
1826 efe
->lengthAllocDescs
= cpu_to_le32(iinfo
->i_lenAlloc
);
1827 efe
->checkpoint
= cpu_to_le32(iinfo
->i_checkpoint
);
1828 efe
->descTag
.tagIdent
= cpu_to_le16(TAG_IDENT_EFE
);
1829 crclen
= sizeof(struct extendedFileEntry
);
1833 if (iinfo
->i_strat4096
) {
1834 fe
->icbTag
.strategyType
= cpu_to_le16(4096);
1835 fe
->icbTag
.strategyParameter
= cpu_to_le16(1);
1836 fe
->icbTag
.numEntries
= cpu_to_le16(2);
1838 fe
->icbTag
.strategyType
= cpu_to_le16(4);
1839 fe
->icbTag
.numEntries
= cpu_to_le16(1);
1843 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_USE
;
1844 else if (S_ISDIR(inode
->i_mode
))
1845 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_DIRECTORY
;
1846 else if (S_ISREG(inode
->i_mode
))
1847 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_REGULAR
;
1848 else if (S_ISLNK(inode
->i_mode
))
1849 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_SYMLINK
;
1850 else if (S_ISBLK(inode
->i_mode
))
1851 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_BLOCK
;
1852 else if (S_ISCHR(inode
->i_mode
))
1853 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_CHAR
;
1854 else if (S_ISFIFO(inode
->i_mode
))
1855 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_FIFO
;
1856 else if (S_ISSOCK(inode
->i_mode
))
1857 fe
->icbTag
.fileType
= ICBTAG_FILE_TYPE_SOCKET
;
1859 icbflags
= iinfo
->i_alloc_type
|
1860 ((inode
->i_mode
& S_ISUID
) ? ICBTAG_FLAG_SETUID
: 0) |
1861 ((inode
->i_mode
& S_ISGID
) ? ICBTAG_FLAG_SETGID
: 0) |
1862 ((inode
->i_mode
& S_ISVTX
) ? ICBTAG_FLAG_STICKY
: 0) |
1863 (le16_to_cpu(fe
->icbTag
.flags
) &
1864 ~(ICBTAG_FLAG_AD_MASK
| ICBTAG_FLAG_SETUID
|
1865 ICBTAG_FLAG_SETGID
| ICBTAG_FLAG_STICKY
));
1867 fe
->icbTag
.flags
= cpu_to_le16(icbflags
);
1868 if (sbi
->s_udfrev
>= 0x0200)
1869 fe
->descTag
.descVersion
= cpu_to_le16(3);
1871 fe
->descTag
.descVersion
= cpu_to_le16(2);
1872 fe
->descTag
.tagSerialNum
= cpu_to_le16(sbi
->s_serial_number
);
1873 fe
->descTag
.tagLocation
= cpu_to_le32(
1874 iinfo
->i_location
.logicalBlockNum
);
1875 crclen
+= iinfo
->i_lenEAttr
+ iinfo
->i_lenAlloc
- sizeof(struct tag
);
1876 fe
->descTag
.descCRCLength
= cpu_to_le16(crclen
);
1877 fe
->descTag
.descCRC
= cpu_to_le16(crc_itu_t(0, (char *)fe
+ sizeof(struct tag
),
1879 fe
->descTag
.tagChecksum
= udf_tag_checksum(&fe
->descTag
);
1881 set_buffer_uptodate(bh
);
1884 /* write the data blocks */
1885 mark_buffer_dirty(bh
);
1887 sync_dirty_buffer(bh
);
1888 if (buffer_write_io_error(bh
)) {
1889 udf_warn(inode
->i_sb
, "IO error syncing udf inode [%08lx]\n",
1899 struct inode
*__udf_iget(struct super_block
*sb
, struct kernel_lb_addr
*ino
,
1902 unsigned long block
= udf_get_lb_pblock(sb
, ino
, 0);
1903 struct inode
*inode
= iget_locked(sb
, block
);
1907 return ERR_PTR(-ENOMEM
);
1909 if (!(inode
->i_state
& I_NEW
))
1912 memcpy(&UDF_I(inode
)->i_location
, ino
, sizeof(struct kernel_lb_addr
));
1913 err
= udf_read_inode(inode
, hidden_inode
);
1916 return ERR_PTR(err
);
1918 unlock_new_inode(inode
);
1923 int udf_setup_indirect_aext(struct inode
*inode
, udf_pblk_t block
,
1924 struct extent_position
*epos
)
1926 struct super_block
*sb
= inode
->i_sb
;
1927 struct buffer_head
*bh
;
1928 struct allocExtDesc
*aed
;
1929 struct extent_position nepos
;
1930 struct kernel_lb_addr neloc
;
1933 if (UDF_I(inode
)->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
1934 adsize
= sizeof(struct short_ad
);
1935 else if (UDF_I(inode
)->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
1936 adsize
= sizeof(struct long_ad
);
1940 neloc
.logicalBlockNum
= block
;
1941 neloc
.partitionReferenceNum
= epos
->block
.partitionReferenceNum
;
1943 bh
= udf_tgetblk(sb
, udf_get_lb_pblock(sb
, &neloc
, 0));
1947 memset(bh
->b_data
, 0x00, sb
->s_blocksize
);
1948 set_buffer_uptodate(bh
);
1950 mark_buffer_dirty_inode(bh
, inode
);
1952 aed
= (struct allocExtDesc
*)(bh
->b_data
);
1953 if (!UDF_QUERY_FLAG(sb
, UDF_FLAG_STRICT
)) {
1954 aed
->previousAllocExtLocation
=
1955 cpu_to_le32(epos
->block
.logicalBlockNum
);
1957 aed
->lengthAllocDescs
= cpu_to_le32(0);
1958 if (UDF_SB(sb
)->s_udfrev
>= 0x0200)
1962 udf_new_tag(bh
->b_data
, TAG_IDENT_AED
, ver
, 1, block
,
1963 sizeof(struct tag
));
1965 nepos
.block
= neloc
;
1966 nepos
.offset
= sizeof(struct allocExtDesc
);
1970 * Do we have to copy current last extent to make space for indirect
1973 if (epos
->offset
+ adsize
> sb
->s_blocksize
) {
1974 struct kernel_lb_addr cp_loc
;
1978 epos
->offset
-= adsize
;
1979 cp_type
= udf_current_aext(inode
, epos
, &cp_loc
, &cp_len
, 0);
1980 cp_len
|= ((uint32_t)cp_type
) << 30;
1982 __udf_add_aext(inode
, &nepos
, &cp_loc
, cp_len
, 1);
1983 udf_write_aext(inode
, epos
, &nepos
.block
,
1984 sb
->s_blocksize
| EXT_NEXT_EXTENT_ALLOCDESCS
, 0);
1986 __udf_add_aext(inode
, epos
, &nepos
.block
,
1987 sb
->s_blocksize
| EXT_NEXT_EXTENT_ALLOCDESCS
, 0);
1997 * Append extent at the given position - should be the first free one in inode
1998 * / indirect extent. This function assumes there is enough space in the inode
1999 * or indirect extent. Use udf_add_aext() if you didn't check for this before.
2001 int __udf_add_aext(struct inode
*inode
, struct extent_position
*epos
,
2002 struct kernel_lb_addr
*eloc
, uint32_t elen
, int inc
)
2004 struct udf_inode_info
*iinfo
= UDF_I(inode
);
2005 struct allocExtDesc
*aed
;
2008 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
2009 adsize
= sizeof(struct short_ad
);
2010 else if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
2011 adsize
= sizeof(struct long_ad
);
2016 WARN_ON(iinfo
->i_lenAlloc
!=
2017 epos
->offset
- udf_file_entry_alloc_offset(inode
));
2019 aed
= (struct allocExtDesc
*)epos
->bh
->b_data
;
2020 WARN_ON(le32_to_cpu(aed
->lengthAllocDescs
) !=
2021 epos
->offset
- sizeof(struct allocExtDesc
));
2022 WARN_ON(epos
->offset
+ adsize
> inode
->i_sb
->s_blocksize
);
2025 udf_write_aext(inode
, epos
, eloc
, elen
, inc
);
2028 iinfo
->i_lenAlloc
+= adsize
;
2029 mark_inode_dirty(inode
);
2031 aed
= (struct allocExtDesc
*)epos
->bh
->b_data
;
2032 le32_add_cpu(&aed
->lengthAllocDescs
, adsize
);
2033 if (!UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_STRICT
) ||
2034 UDF_SB(inode
->i_sb
)->s_udfrev
>= 0x0201)
2035 udf_update_tag(epos
->bh
->b_data
,
2036 epos
->offset
+ (inc
? 0 : adsize
));
2038 udf_update_tag(epos
->bh
->b_data
,
2039 sizeof(struct allocExtDesc
));
2040 mark_buffer_dirty_inode(epos
->bh
, inode
);
2047 * Append extent at given position - should be the first free one in inode
2048 * / indirect extent. Takes care of allocating and linking indirect blocks.
2050 int udf_add_aext(struct inode
*inode
, struct extent_position
*epos
,
2051 struct kernel_lb_addr
*eloc
, uint32_t elen
, int inc
)
2054 struct super_block
*sb
= inode
->i_sb
;
2056 if (UDF_I(inode
)->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
2057 adsize
= sizeof(struct short_ad
);
2058 else if (UDF_I(inode
)->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
2059 adsize
= sizeof(struct long_ad
);
2063 if (epos
->offset
+ (2 * adsize
) > sb
->s_blocksize
) {
2065 udf_pblk_t new_block
;
2067 new_block
= udf_new_block(sb
, NULL
,
2068 epos
->block
.partitionReferenceNum
,
2069 epos
->block
.logicalBlockNum
, &err
);
2073 err
= udf_setup_indirect_aext(inode
, new_block
, epos
);
2078 return __udf_add_aext(inode
, epos
, eloc
, elen
, inc
);
2081 void udf_write_aext(struct inode
*inode
, struct extent_position
*epos
,
2082 struct kernel_lb_addr
*eloc
, uint32_t elen
, int inc
)
2086 struct short_ad
*sad
;
2087 struct long_ad
*lad
;
2088 struct udf_inode_info
*iinfo
= UDF_I(inode
);
2091 ptr
= iinfo
->i_ext
.i_data
+ epos
->offset
-
2092 udf_file_entry_alloc_offset(inode
) +
2095 ptr
= epos
->bh
->b_data
+ epos
->offset
;
2097 switch (iinfo
->i_alloc_type
) {
2098 case ICBTAG_FLAG_AD_SHORT
:
2099 sad
= (struct short_ad
*)ptr
;
2100 sad
->extLength
= cpu_to_le32(elen
);
2101 sad
->extPosition
= cpu_to_le32(eloc
->logicalBlockNum
);
2102 adsize
= sizeof(struct short_ad
);
2104 case ICBTAG_FLAG_AD_LONG
:
2105 lad
= (struct long_ad
*)ptr
;
2106 lad
->extLength
= cpu_to_le32(elen
);
2107 lad
->extLocation
= cpu_to_lelb(*eloc
);
2108 memset(lad
->impUse
, 0x00, sizeof(lad
->impUse
));
2109 adsize
= sizeof(struct long_ad
);
2116 if (!UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_STRICT
) ||
2117 UDF_SB(inode
->i_sb
)->s_udfrev
>= 0x0201) {
2118 struct allocExtDesc
*aed
=
2119 (struct allocExtDesc
*)epos
->bh
->b_data
;
2120 udf_update_tag(epos
->bh
->b_data
,
2121 le32_to_cpu(aed
->lengthAllocDescs
) +
2122 sizeof(struct allocExtDesc
));
2124 mark_buffer_dirty_inode(epos
->bh
, inode
);
2126 mark_inode_dirty(inode
);
2130 epos
->offset
+= adsize
;
2134 * Only 1 indirect extent in a row really makes sense but allow upto 16 in case
2135 * someone does some weird stuff.
2137 #define UDF_MAX_INDIR_EXTS 16
2139 int8_t udf_next_aext(struct inode
*inode
, struct extent_position
*epos
,
2140 struct kernel_lb_addr
*eloc
, uint32_t *elen
, int inc
)
2143 unsigned int indirections
= 0;
2145 while ((etype
= udf_current_aext(inode
, epos
, eloc
, elen
, inc
)) ==
2146 (EXT_NEXT_EXTENT_ALLOCDESCS
>> 30)) {
2149 if (++indirections
> UDF_MAX_INDIR_EXTS
) {
2150 udf_err(inode
->i_sb
,
2151 "too many indirect extents in inode %lu\n",
2156 epos
->block
= *eloc
;
2157 epos
->offset
= sizeof(struct allocExtDesc
);
2159 block
= udf_get_lb_pblock(inode
->i_sb
, &epos
->block
, 0);
2160 epos
->bh
= udf_tread(inode
->i_sb
, block
);
2162 udf_debug("reading block %u failed!\n", block
);
2170 int8_t udf_current_aext(struct inode
*inode
, struct extent_position
*epos
,
2171 struct kernel_lb_addr
*eloc
, uint32_t *elen
, int inc
)
2176 struct short_ad
*sad
;
2177 struct long_ad
*lad
;
2178 struct udf_inode_info
*iinfo
= UDF_I(inode
);
2182 epos
->offset
= udf_file_entry_alloc_offset(inode
);
2183 ptr
= iinfo
->i_ext
.i_data
+ epos
->offset
-
2184 udf_file_entry_alloc_offset(inode
) +
2186 alen
= udf_file_entry_alloc_offset(inode
) +
2190 epos
->offset
= sizeof(struct allocExtDesc
);
2191 ptr
= epos
->bh
->b_data
+ epos
->offset
;
2192 alen
= sizeof(struct allocExtDesc
) +
2193 le32_to_cpu(((struct allocExtDesc
*)epos
->bh
->b_data
)->
2197 switch (iinfo
->i_alloc_type
) {
2198 case ICBTAG_FLAG_AD_SHORT
:
2199 sad
= udf_get_fileshortad(ptr
, alen
, &epos
->offset
, inc
);
2202 etype
= le32_to_cpu(sad
->extLength
) >> 30;
2203 eloc
->logicalBlockNum
= le32_to_cpu(sad
->extPosition
);
2204 eloc
->partitionReferenceNum
=
2205 iinfo
->i_location
.partitionReferenceNum
;
2206 *elen
= le32_to_cpu(sad
->extLength
) & UDF_EXTENT_LENGTH_MASK
;
2208 case ICBTAG_FLAG_AD_LONG
:
2209 lad
= udf_get_filelongad(ptr
, alen
, &epos
->offset
, inc
);
2212 etype
= le32_to_cpu(lad
->extLength
) >> 30;
2213 *eloc
= lelb_to_cpu(lad
->extLocation
);
2214 *elen
= le32_to_cpu(lad
->extLength
) & UDF_EXTENT_LENGTH_MASK
;
2217 udf_debug("alloc_type = %u unsupported\n", iinfo
->i_alloc_type
);
2224 static int8_t udf_insert_aext(struct inode
*inode
, struct extent_position epos
,
2225 struct kernel_lb_addr neloc
, uint32_t nelen
)
2227 struct kernel_lb_addr oeloc
;
2234 while ((etype
= udf_next_aext(inode
, &epos
, &oeloc
, &oelen
, 0)) != -1) {
2235 udf_write_aext(inode
, &epos
, &neloc
, nelen
, 1);
2237 nelen
= (etype
<< 30) | oelen
;
2239 udf_add_aext(inode
, &epos
, &neloc
, nelen
, 1);
2242 return (nelen
>> 30);
2245 int8_t udf_delete_aext(struct inode
*inode
, struct extent_position epos
)
2247 struct extent_position oepos
;
2250 struct allocExtDesc
*aed
;
2251 struct udf_inode_info
*iinfo
;
2252 struct kernel_lb_addr eloc
;
2260 iinfo
= UDF_I(inode
);
2261 if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_SHORT
)
2262 adsize
= sizeof(struct short_ad
);
2263 else if (iinfo
->i_alloc_type
== ICBTAG_FLAG_AD_LONG
)
2264 adsize
= sizeof(struct long_ad
);
2269 if (udf_next_aext(inode
, &epos
, &eloc
, &elen
, 1) == -1)
2272 while ((etype
= udf_next_aext(inode
, &epos
, &eloc
, &elen
, 1)) != -1) {
2273 udf_write_aext(inode
, &oepos
, &eloc
, (etype
<< 30) | elen
, 1);
2274 if (oepos
.bh
!= epos
.bh
) {
2275 oepos
.block
= epos
.block
;
2279 oepos
.offset
= epos
.offset
- adsize
;
2282 memset(&eloc
, 0x00, sizeof(struct kernel_lb_addr
));
2285 if (epos
.bh
!= oepos
.bh
) {
2286 udf_free_blocks(inode
->i_sb
, inode
, &epos
.block
, 0, 1);
2287 udf_write_aext(inode
, &oepos
, &eloc
, elen
, 1);
2288 udf_write_aext(inode
, &oepos
, &eloc
, elen
, 1);
2290 iinfo
->i_lenAlloc
-= (adsize
* 2);
2291 mark_inode_dirty(inode
);
2293 aed
= (struct allocExtDesc
*)oepos
.bh
->b_data
;
2294 le32_add_cpu(&aed
->lengthAllocDescs
, -(2 * adsize
));
2295 if (!UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_STRICT
) ||
2296 UDF_SB(inode
->i_sb
)->s_udfrev
>= 0x0201)
2297 udf_update_tag(oepos
.bh
->b_data
,
2298 oepos
.offset
- (2 * adsize
));
2300 udf_update_tag(oepos
.bh
->b_data
,
2301 sizeof(struct allocExtDesc
));
2302 mark_buffer_dirty_inode(oepos
.bh
, inode
);
2305 udf_write_aext(inode
, &oepos
, &eloc
, elen
, 1);
2307 iinfo
->i_lenAlloc
-= adsize
;
2308 mark_inode_dirty(inode
);
2310 aed
= (struct allocExtDesc
*)oepos
.bh
->b_data
;
2311 le32_add_cpu(&aed
->lengthAllocDescs
, -adsize
);
2312 if (!UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_STRICT
) ||
2313 UDF_SB(inode
->i_sb
)->s_udfrev
>= 0x0201)
2314 udf_update_tag(oepos
.bh
->b_data
,
2315 epos
.offset
- adsize
);
2317 udf_update_tag(oepos
.bh
->b_data
,
2318 sizeof(struct allocExtDesc
));
2319 mark_buffer_dirty_inode(oepos
.bh
, inode
);
2326 return (elen
>> 30);
2329 int8_t inode_bmap(struct inode
*inode
, sector_t block
,
2330 struct extent_position
*pos
, struct kernel_lb_addr
*eloc
,
2331 uint32_t *elen
, sector_t
*offset
)
2333 unsigned char blocksize_bits
= inode
->i_sb
->s_blocksize_bits
;
2334 loff_t lbcount
= 0, bcount
= (loff_t
) block
<< blocksize_bits
;
2336 struct udf_inode_info
*iinfo
;
2338 iinfo
= UDF_I(inode
);
2339 if (!udf_read_extent_cache(inode
, bcount
, &lbcount
, pos
)) {
2341 pos
->block
= iinfo
->i_location
;
2346 etype
= udf_next_aext(inode
, pos
, eloc
, elen
, 1);
2348 *offset
= (bcount
- lbcount
) >> blocksize_bits
;
2349 iinfo
->i_lenExtents
= lbcount
;
2353 } while (lbcount
<= bcount
);
2354 /* update extent cache */
2355 udf_update_extent_cache(inode
, lbcount
- *elen
, pos
);
2356 *offset
= (bcount
+ *elen
- lbcount
) >> blocksize_bits
;
2361 udf_pblk_t
udf_block_map(struct inode
*inode
, sector_t block
)
2363 struct kernel_lb_addr eloc
;
2366 struct extent_position epos
= {};
2369 down_read(&UDF_I(inode
)->i_data_sem
);
2371 if (inode_bmap(inode
, block
, &epos
, &eloc
, &elen
, &offset
) ==
2372 (EXT_RECORDED_ALLOCATED
>> 30))
2373 ret
= udf_get_lb_pblock(inode
->i_sb
, &eloc
, offset
);
2377 up_read(&UDF_I(inode
)->i_data_sem
);
2380 if (UDF_QUERY_FLAG(inode
->i_sb
, UDF_FLAG_VARCONV
))
2381 return udf_fixed_to_variable(ret
);