• Home
  • Raw
  • Download

Lines Matching refs:inode

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 int udf_insert_aext(struct inode *, struct extent_position,
62 static void udf_split_extents(struct inode *, int *, int, udf_pblk_t,
64 static void udf_prealloc_extents(struct inode *, int, int,
66 static void udf_merge_extents(struct inode *, struct kernel_long_ad *, int *);
67 static int udf_update_extents(struct inode *, struct kernel_long_ad *, int,
69 static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
71 static void __udf_clear_extent_cache(struct inode *inode) in __udf_clear_extent_cache() argument
73 struct udf_inode_info *iinfo = UDF_I(inode); in __udf_clear_extent_cache()
82 static void udf_clear_extent_cache(struct inode *inode) in udf_clear_extent_cache() argument
84 struct udf_inode_info *iinfo = UDF_I(inode); in udf_clear_extent_cache()
87 __udf_clear_extent_cache(inode); in udf_clear_extent_cache()
92 static int udf_read_extent_cache(struct inode *inode, loff_t bcount, in udf_read_extent_cache() argument
95 struct udf_inode_info *iinfo = UDF_I(inode); in udf_read_extent_cache()
114 static void udf_update_extent_cache(struct inode *inode, loff_t estart, in udf_update_extent_cache() argument
117 struct udf_inode_info *iinfo = UDF_I(inode); in udf_update_extent_cache()
121 __udf_clear_extent_cache(inode); in udf_update_extent_cache()
137 void udf_evict_inode(struct inode *inode) in udf_evict_inode() argument
139 struct udf_inode_info *iinfo = UDF_I(inode); in udf_evict_inode()
142 if (!is_bad_inode(inode)) { in udf_evict_inode()
143 if (!inode->i_nlink) { in udf_evict_inode()
145 udf_setsize(inode, 0); in udf_evict_inode()
146 udf_update_inode(inode, IS_SYNC(inode)); in udf_evict_inode()
149 inode->i_size != iinfo->i_lenExtents) { in udf_evict_inode()
150 udf_warn(inode->i_sb, in udf_evict_inode()
152 inode->i_ino, inode->i_mode, in udf_evict_inode()
153 (unsigned long long)inode->i_size, in udf_evict_inode()
157 truncate_inode_pages_final(&inode->i_data); in udf_evict_inode()
158 invalidate_inode_buffers(inode); in udf_evict_inode()
159 clear_inode(inode); in udf_evict_inode()
162 udf_clear_extent_cache(inode); in udf_evict_inode()
164 udf_free_inode(inode); in udf_evict_inode()
170 struct inode *inode = mapping->host; in udf_write_failed() local
171 struct udf_inode_info *iinfo = UDF_I(inode); in udf_write_failed()
172 loff_t isize = inode->i_size; in udf_write_failed()
175 truncate_pagecache(inode, isize); in udf_write_failed()
178 udf_clear_extent_cache(inode); in udf_write_failed()
179 udf_truncate_extents(inode); in udf_write_failed()
222 struct inode *inode = mapping->host; in udf_direct_IO() local
226 ret = blockdev_direct_IO(iocb, inode, iter, udf_get_block); in udf_direct_IO()
255 int udf_expand_file_adinicb(struct inode *inode) in udf_expand_file_adinicb() argument
259 struct udf_inode_info *iinfo = UDF_I(inode); in udf_expand_file_adinicb()
262 WARN_ON_ONCE(!inode_is_locked(inode)); in udf_expand_file_adinicb()
264 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_file_adinicb()
269 inode->i_data.a_ops = &udf_aops; in udf_expand_file_adinicb()
271 mark_inode_dirty(inode); in udf_expand_file_adinicb()
280 page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS); in udf_expand_file_adinicb()
298 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_file_adinicb()
303 inode->i_data.a_ops = &udf_aops; in udf_expand_file_adinicb()
307 err = filemap_fdatawrite(inode->i_mapping); in udf_expand_file_adinicb()
313 memcpy(iinfo->i_data + iinfo->i_lenEAttr, kaddr, inode->i_size); in udf_expand_file_adinicb()
317 inode->i_data.a_ops = &udf_adinicb_aops; in udf_expand_file_adinicb()
318 iinfo->i_lenAlloc = inode->i_size; in udf_expand_file_adinicb()
322 mark_inode_dirty(inode); in udf_expand_file_adinicb()
327 struct buffer_head *udf_expand_dir_adinicb(struct inode *inode, in udf_expand_dir_adinicb() argument
337 loff_t f_pos = udf_ext0_offset(inode); in udf_expand_dir_adinicb()
338 int size = udf_ext0_offset(inode) + inode->i_size; in udf_expand_dir_adinicb()
340 struct udf_inode_info *iinfo = UDF_I(inode); in udf_expand_dir_adinicb()
342 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_dir_adinicb()
347 if (!inode->i_size) { in udf_expand_dir_adinicb()
349 mark_inode_dirty(inode); in udf_expand_dir_adinicb()
354 *block = udf_new_block(inode->i_sb, inode, in udf_expand_dir_adinicb()
359 newblock = udf_get_pblock(inode->i_sb, *block, in udf_expand_dir_adinicb()
364 dbh = udf_tgetblk(inode->i_sb, newblock); in udf_expand_dir_adinicb()
368 memset(dbh->b_data, 0x00, inode->i_sb->s_blocksize); in udf_expand_dir_adinicb()
371 mark_buffer_dirty_inode(dbh, inode); in udf_expand_dir_adinicb()
374 f_pos & (inode->i_sb->s_blocksize - 1); in udf_expand_dir_adinicb()
380 sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL, in udf_expand_dir_adinicb()
391 if (udf_write_fi(inode, sfi, dfi, &dfibh, sfi->impUse, in udf_expand_dir_adinicb()
398 mark_buffer_dirty_inode(dbh, inode); in udf_expand_dir_adinicb()
405 iinfo->i_lenExtents = inode->i_size; in udf_expand_dir_adinicb()
408 epos.offset = udf_file_entry_alloc_offset(inode); in udf_expand_dir_adinicb()
409 udf_add_aext(inode, &epos, &eloc, inode->i_size, 0); in udf_expand_dir_adinicb()
413 mark_inode_dirty(inode); in udf_expand_dir_adinicb()
417 static int udf_get_block(struct inode *inode, sector_t block, in udf_get_block() argument
425 phys = udf_block_map(inode, block); in udf_get_block()
427 map_bh(bh_result, inode->i_sb, phys); in udf_get_block()
433 iinfo = UDF_I(inode); in udf_get_block()
445 if (((loff_t)block) << inode->i_blkbits >= iinfo->i_lenExtents) in udf_get_block()
446 udf_discard_prealloc(inode); in udf_get_block()
447 udf_clear_extent_cache(inode); in udf_get_block()
448 phys = inode_getblk(inode, block, &err, &new); in udf_get_block()
454 map_bh(bh_result, inode->i_sb, phys); in udf_get_block()
461 static struct buffer_head *udf_getblk(struct inode *inode, udf_pblk_t block, in udf_getblk() argument
469 *err = udf_get_block(inode, block, &dummy, create); in udf_getblk()
471 bh = sb_getblk(inode->i_sb, dummy.b_blocknr); in udf_getblk()
474 memset(bh->b_data, 0x00, inode->i_sb->s_blocksize); in udf_getblk()
477 mark_buffer_dirty_inode(bh, inode); in udf_getblk()
488 static int udf_do_extend_file(struct inode *inode, in udf_do_extend_file() argument
495 struct super_block *sb = inode->i_sb; in udf_do_extend_file()
504 iinfo = UDF_I(inode); in udf_do_extend_file()
528 err = udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
537 udf_write_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
546 udf_next_aext(inode, last_pos, &tmploc, &tmplen, 0); in udf_do_extend_file()
562 err = udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
571 err = udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
590 udf_clear_extent_cache(inode); in udf_do_extend_file()
591 udf_truncate_extents(inode); in udf_do_extend_file()
596 static void udf_do_extend_final_block(struct inode *inode, in udf_do_extend_final_block() argument
611 UDF_I(inode)->i_lenExtents += added_bytes; in udf_do_extend_final_block()
613 udf_write_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_final_block()
617 static int udf_extend_file(struct inode *inode, loff_t newsize) in udf_extend_file() argument
624 struct super_block *sb = inode->i_sb; in udf_extend_file()
628 struct udf_inode_info *iinfo = UDF_I(inode); in udf_extend_file()
644 udf_discard_prealloc(inode); in udf_extend_file()
646 etype = inode_bmap(inode, first_block, &epos, &eloc, &elen, &offset); in udf_extend_file()
650 elen > ((loff_t)offset + 1) << inode->i_blkbits); in udf_extend_file()
652 if ((!epos.bh && epos.offset == udf_file_entry_alloc_offset(inode)) || in udf_extend_file()
661 etype = udf_next_aext(inode, &epos, &extent.extLocation, in udf_extend_file()
666 new_elen = ((loff_t)offset << inode->i_blkbits) | in udf_extend_file()
674 udf_do_extend_final_block(inode, &epos, &extent, new_elen); in udf_extend_file()
676 err = udf_do_extend_file(inode, &epos, &extent, new_elen); in udf_extend_file()
688 static sector_t inode_getblk(struct inode *inode, sector_t block, in inode_getblk() argument
701 struct udf_inode_info *iinfo = UDF_I(inode); in inode_getblk()
708 prev_epos.offset = udf_file_entry_alloc_offset(inode); in inode_getblk()
712 b_off = (loff_t)block << inode->i_sb->s_blocksize_bits; in inode_getblk()
737 etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 1); in inode_getblk()
748 ((elen + inode->i_sb->s_blocksize - 1) >> in inode_getblk()
749 inode->i_sb->s_blocksize_bits); in inode_getblk()
755 offset = b_off >> inode->i_sb->s_blocksize_bits; in inode_getblk()
760 udf_next_aext(inode, &prev_epos, &tmpeloc, &tmpelen, 0); in inode_getblk()
761 udf_next_aext(inode, &cur_epos, &tmpeloc, &tmpelen, 0); in inode_getblk()
767 if (elen & (inode->i_sb->s_blocksize - 1)) { in inode_getblk()
769 ((elen + inode->i_sb->s_blocksize - 1) & in inode_getblk()
770 ~(inode->i_sb->s_blocksize - 1)); in inode_getblk()
771 udf_write_aext(inode, &cur_epos, &eloc, elen, 1); in inode_getblk()
773 newblock = udf_get_lb_pblock(inode->i_sb, &eloc, offset); in inode_getblk()
797 hole_len = (loff_t)offset << inode->i_blkbits; in inode_getblk()
798 ret = udf_do_extend_file(inode, &prev_epos, laarr, hole_len); in inode_getblk()
813 inode->i_sb->s_blocksize; in inode_getblk()
834 etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 0); in inode_getblk()
858 newblocknum = udf_new_block(inode->i_sb, inode, in inode_getblk()
866 iinfo->i_lenExtents += inode->i_sb->s_blocksize; in inode_getblk()
873 udf_split_extents(inode, &c, offset, newblocknum, laarr, &endnum); in inode_getblk()
879 if (S_ISREG(inode->i_mode)) in inode_getblk()
880 udf_prealloc_extents(inode, c, lastblock, laarr, &endnum); in inode_getblk()
883 udf_merge_extents(inode, laarr, &endnum); in inode_getblk()
888 *err = udf_update_extents(inode, laarr, startnum, endnum, &prev_epos); in inode_getblk()
892 newblock = udf_get_pblock(inode->i_sb, newblocknum, in inode_getblk()
901 inode->i_ctime = current_time(inode); in inode_getblk()
903 if (IS_SYNC(inode)) in inode_getblk()
904 udf_sync_inode(inode); in inode_getblk()
906 mark_inode_dirty(inode); in inode_getblk()
914 static void udf_split_extents(struct inode *inode, int *c, int offset, in udf_split_extents() argument
918 unsigned long blocksize = inode->i_sb->s_blocksize; in udf_split_extents()
919 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_split_extents()
941 udf_free_blocks(inode->i_sb, inode, in udf_split_extents()
961 UDF_I(inode)->i_location.partitionReferenceNum; in udf_split_extents()
978 static void udf_prealloc_extents(struct inode *inode, int c, int lastblock, in udf_prealloc_extents() argument
996 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
997 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1010 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
1011 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1019 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
1020 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1021 int numalloc = udf_prealloc_blocks(inode->i_sb, inode, in udf_prealloc_extents()
1030 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1042 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1049 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
1050 inode->i_sb->s_blocksize_bits; in udf_prealloc_extents()
1055 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1068 UDF_I(inode)->i_lenExtents += in udf_prealloc_extents()
1069 numalloc << inode->i_sb->s_blocksize_bits; in udf_prealloc_extents()
1074 static void udf_merge_extents(struct inode *inode, struct kernel_long_ad *laarr, in udf_merge_extents() argument
1078 unsigned long blocksize = inode->i_sb->s_blocksize; in udf_merge_extents()
1079 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_merge_extents()
1111 udf_free_blocks(inode->i_sb, inode, &li->extLocation, 0, in udf_merge_extents()
1144 udf_free_blocks(inode->i_sb, inode, in udf_merge_extents()
1158 static int udf_update_extents(struct inode *inode, struct kernel_long_ad *laarr, in udf_update_extents() argument
1169 udf_delete_aext(inode, *epos); in udf_update_extents()
1172 err = udf_insert_aext(inode, *epos, in udf_update_extents()
1182 udf_next_aext(inode, epos, &laarr[i].extLocation, in udf_update_extents()
1189 udf_next_aext(inode, epos, &tmploc, &tmplen, 0); in udf_update_extents()
1190 udf_write_aext(inode, epos, &laarr[i].extLocation, in udf_update_extents()
1196 struct buffer_head *udf_bread(struct inode *inode, udf_pblk_t block, in udf_bread() argument
1201 bh = udf_getblk(inode, block, create, err); in udf_bread()
1219 int udf_setsize(struct inode *inode, loff_t newsize) in udf_setsize() argument
1223 unsigned int bsize = i_blocksize(inode); in udf_setsize()
1225 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in udf_setsize()
1226 S_ISLNK(inode->i_mode))) in udf_setsize()
1228 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) in udf_setsize()
1231 iinfo = UDF_I(inode); in udf_setsize()
1232 if (newsize > inode->i_size) { in udf_setsize()
1236 (udf_file_entry_alloc_offset(inode) + newsize)) { in udf_setsize()
1237 err = udf_expand_file_adinicb(inode); in udf_setsize()
1246 err = udf_extend_file(inode, newsize); in udf_setsize()
1253 truncate_setsize(inode, newsize); in udf_setsize()
1257 udf_clear_extent_cache(inode); in udf_setsize()
1260 udf_file_entry_alloc_offset(inode)); in udf_setsize()
1262 truncate_setsize(inode, newsize); in udf_setsize()
1266 err = block_truncate_page(inode->i_mapping, newsize, in udf_setsize()
1270 truncate_setsize(inode, newsize); in udf_setsize()
1272 udf_clear_extent_cache(inode); in udf_setsize()
1273 err = udf_truncate_extents(inode); in udf_setsize()
1279 inode->i_mtime = inode->i_ctime = current_time(inode); in udf_setsize()
1280 if (IS_SYNC(inode)) in udf_setsize()
1281 udf_sync_inode(inode); in udf_setsize()
1283 mark_inode_dirty(inode); in udf_setsize()
1294 static int udf_read_inode(struct inode *inode, bool hidden_inode) in udf_read_inode() argument
1300 struct udf_inode_info *iinfo = UDF_I(inode); in udf_read_inode()
1301 struct udf_sb_info *sbi = UDF_SB(inode->i_sb); in udf_read_inode()
1305 int bs = inode->i_sb->s_blocksize; in udf_read_inode()
1335 bh = udf_read_ptagged(inode->i_sb, iloc, 0, &ident); in udf_read_inode()
1337 udf_err(inode->i_sb, "(ino %lu) failed !bh\n", inode->i_ino); in udf_read_inode()
1343 udf_err(inode->i_sb, "(ino %lu) failed ident=%u\n", in udf_read_inode()
1344 inode->i_ino, ident); in udf_read_inode()
1354 ibh = udf_read_ptagged(inode->i_sb, iloc, 1, &ident); in udf_read_inode()
1367 udf_err(inode->i_sb, in udf_read_inode()
1379 udf_err(inode->i_sb, "unsupported strategy type: %u\n", in udf_read_inode()
1406 ret = udf_alloc_i_data(inode, bs - in udf_read_inode()
1416 ret = udf_alloc_i_data(inode, bs - sizeof(struct fileEntry)); in udf_read_inode()
1428 ret = udf_alloc_i_data(inode, bs - in udf_read_inode()
1442 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_SET)) in udf_read_inode()
1443 inode->i_uid = sbi->s_uid; in udf_read_inode()
1445 i_uid_write(inode, uid); in udf_read_inode()
1449 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_SET)) in udf_read_inode()
1450 inode->i_gid = sbi->s_gid; in udf_read_inode()
1452 i_gid_write(inode, gid); in udf_read_inode()
1456 inode->i_mode = sbi->s_fmode; in udf_read_inode()
1459 inode->i_mode = sbi->s_dmode; in udf_read_inode()
1461 inode->i_mode = udf_convert_permissions(fe); in udf_read_inode()
1462 inode->i_mode &= ~sbi->s_umask; in udf_read_inode()
1475 set_nlink(inode, link_count); in udf_read_inode()
1477 inode->i_size = le64_to_cpu(fe->informationLength); in udf_read_inode()
1478 iinfo->i_lenExtents = inode->i_size; in udf_read_inode()
1481 inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << in udf_read_inode()
1482 (inode->i_sb->s_blocksize_bits - 9); in udf_read_inode()
1484 udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime); in udf_read_inode()
1485 udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime); in udf_read_inode()
1486 udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime); in udf_read_inode()
1495 inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << in udf_read_inode()
1496 (inode->i_sb->s_blocksize_bits - 9); in udf_read_inode()
1498 udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime); in udf_read_inode()
1499 udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime); in udf_read_inode()
1501 udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime); in udf_read_inode()
1513 if (iinfo->i_lenStreams >= inode->i_size) in udf_read_inode()
1514 iinfo->i_lenStreams -= inode->i_size; in udf_read_inode()
1518 inode->i_generation = iinfo->i_unique; in udf_read_inode()
1527 if (udf_file_entry_alloc_offset(inode) + iinfo->i_lenAlloc > bs) in udf_read_inode()
1535 if (iinfo->i_lenAlloc != inode->i_size) in udf_read_inode()
1538 if (inode->i_size > bs - udf_file_entry_alloc_offset(inode)) in udf_read_inode()
1544 inode->i_op = &udf_dir_inode_operations; in udf_read_inode()
1545 inode->i_fop = &udf_dir_operations; in udf_read_inode()
1546 inode->i_mode |= S_IFDIR; in udf_read_inode()
1547 inc_nlink(inode); in udf_read_inode()
1554 inode->i_data.a_ops = &udf_adinicb_aops; in udf_read_inode()
1556 inode->i_data.a_ops = &udf_aops; in udf_read_inode()
1557 inode->i_op = &udf_file_inode_operations; in udf_read_inode()
1558 inode->i_fop = &udf_file_operations; in udf_read_inode()
1559 inode->i_mode |= S_IFREG; in udf_read_inode()
1562 inode->i_mode |= S_IFBLK; in udf_read_inode()
1565 inode->i_mode |= S_IFCHR; in udf_read_inode()
1568 init_special_inode(inode, inode->i_mode | S_IFIFO, 0); in udf_read_inode()
1571 init_special_inode(inode, inode->i_mode | S_IFSOCK, 0); in udf_read_inode()
1574 inode->i_data.a_ops = &udf_symlink_aops; in udf_read_inode()
1575 inode->i_op = &udf_symlink_inode_operations; in udf_read_inode()
1576 inode_nohighmem(inode); in udf_read_inode()
1577 inode->i_mode = S_IFLNK | 0777; in udf_read_inode()
1589 udf_err(inode->i_sb, "(ino %lu) failed unknown file type=%u\n", in udf_read_inode()
1590 inode->i_ino, fe->icbTag.fileType); in udf_read_inode()
1593 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in udf_read_inode()
1595 (struct deviceSpec *)udf_get_extendedattr(inode, 12, 1); in udf_read_inode()
1597 init_special_inode(inode, inode->i_mode, in udf_read_inode()
1610 static int udf_alloc_i_data(struct inode *inode, size_t size) in udf_alloc_i_data() argument
1612 struct udf_inode_info *iinfo = UDF_I(inode); in udf_alloc_i_data()
1638 void udf_update_extra_perms(struct inode *inode, umode_t mode) in udf_update_extra_perms() argument
1640 struct udf_inode_info *iinfo = UDF_I(inode); in udf_update_extra_perms()
1655 int udf_write_inode(struct inode *inode, struct writeback_control *wbc) in udf_write_inode() argument
1657 return udf_update_inode(inode, wbc->sync_mode == WB_SYNC_ALL); in udf_write_inode()
1660 static int udf_sync_inode(struct inode *inode) in udf_sync_inode() argument
1662 return udf_update_inode(inode, 1); in udf_sync_inode()
1673 static int udf_update_inode(struct inode *inode, int do_sync) in udf_update_inode() argument
1683 struct udf_sb_info *sbi = UDF_SB(inode->i_sb); in udf_update_inode()
1684 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_update_inode()
1685 struct udf_inode_info *iinfo = UDF_I(inode); in udf_update_inode()
1687 bh = udf_tgetblk(inode->i_sb, in udf_update_inode()
1688 udf_get_lb_pblock(inode->i_sb, &iinfo->i_location, 0)); in udf_update_inode()
1695 memset(bh->b_data, 0, inode->i_sb->s_blocksize); in udf_update_inode()
1705 iinfo->i_data, inode->i_sb->s_blocksize - in udf_update_inode()
1713 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) in udf_update_inode()
1716 fe->uid = cpu_to_le32(i_uid_read(inode)); in udf_update_inode()
1718 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) in udf_update_inode()
1721 fe->gid = cpu_to_le32(i_gid_read(inode)); in udf_update_inode()
1723 udfperms = ((inode->i_mode & 0007)) | in udf_update_inode()
1724 ((inode->i_mode & 0070) << 2) | in udf_update_inode()
1725 ((inode->i_mode & 0700) << 4); in udf_update_inode()
1730 if (S_ISDIR(inode->i_mode) && inode->i_nlink > 0) in udf_update_inode()
1731 fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1); in udf_update_inode()
1736 fe->fileLinkCount = cpu_to_le16(inode->i_nlink); in udf_update_inode()
1739 fe->informationLength = cpu_to_le64(inode->i_size); in udf_update_inode()
1741 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in udf_update_inode()
1744 (struct deviceSpec *)udf_get_extendedattr(inode, 12, 1); in udf_update_inode()
1747 udf_add_extendedattr(inode, in udf_update_inode()
1762 dsea->majorDeviceIdent = cpu_to_le32(imajor(inode)); in udf_update_inode()
1763 dsea->minorDeviceIdent = cpu_to_le32(iminor(inode)); in udf_update_inode()
1770 (inode->i_blocks + (1 << (blocksize_bits - 9)) - 1) >> in udf_update_inode()
1776 inode->i_sb->s_blocksize - sizeof(struct fileEntry)); in udf_update_inode()
1779 udf_time_to_disk_stamp(&fe->accessTime, inode->i_atime); in udf_update_inode()
1780 udf_time_to_disk_stamp(&fe->modificationTime, inode->i_mtime); in udf_update_inode()
1781 udf_time_to_disk_stamp(&fe->attrTime, inode->i_ctime); in udf_update_inode()
1795 inode->i_sb->s_blocksize - in udf_update_inode()
1798 cpu_to_le64(inode->i_size + iinfo->i_lenStreams); in udf_update_inode()
1807 cpu_to_le32(inode->i_sb->s_blocksize); in udf_update_inode()
1810 udf_adjust_time(iinfo, inode->i_atime); in udf_update_inode()
1811 udf_adjust_time(iinfo, inode->i_mtime); in udf_update_inode()
1812 udf_adjust_time(iinfo, inode->i_ctime); in udf_update_inode()
1814 udf_time_to_disk_stamp(&efe->accessTime, inode->i_atime); in udf_update_inode()
1815 udf_time_to_disk_stamp(&efe->modificationTime, inode->i_mtime); in udf_update_inode()
1817 udf_time_to_disk_stamp(&efe->attrTime, inode->i_ctime); in udf_update_inode()
1843 else if (S_ISDIR(inode->i_mode)) in udf_update_inode()
1845 else if (S_ISREG(inode->i_mode)) in udf_update_inode()
1847 else if (S_ISLNK(inode->i_mode)) in udf_update_inode()
1849 else if (S_ISBLK(inode->i_mode)) in udf_update_inode()
1851 else if (S_ISCHR(inode->i_mode)) in udf_update_inode()
1853 else if (S_ISFIFO(inode->i_mode)) in udf_update_inode()
1855 else if (S_ISSOCK(inode->i_mode)) in udf_update_inode()
1859 ((inode->i_mode & S_ISUID) ? ICBTAG_FLAG_SETUID : 0) | in udf_update_inode()
1860 ((inode->i_mode & S_ISGID) ? ICBTAG_FLAG_SETGID : 0) | in udf_update_inode()
1861 ((inode->i_mode & S_ISVTX) ? ICBTAG_FLAG_STICKY : 0) | in udf_update_inode()
1888 udf_warn(inode->i_sb, "IO error syncing udf inode [%08lx]\n", in udf_update_inode()
1889 inode->i_ino); in udf_update_inode()
1898 struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino, in __udf_iget()
1902 struct inode *inode = iget_locked(sb, block); in __udf_iget() local
1905 if (!inode) in __udf_iget()
1908 if (!(inode->i_state & I_NEW)) { in __udf_iget()
1909 if (UDF_I(inode)->i_hidden != hidden_inode) { in __udf_iget()
1910 iput(inode); in __udf_iget()
1913 return inode; in __udf_iget()
1916 memcpy(&UDF_I(inode)->i_location, ino, sizeof(struct kernel_lb_addr)); in __udf_iget()
1917 err = udf_read_inode(inode, hidden_inode); in __udf_iget()
1919 iget_failed(inode); in __udf_iget()
1922 unlock_new_inode(inode); in __udf_iget()
1924 return inode; in __udf_iget()
1927 int udf_setup_indirect_aext(struct inode *inode, udf_pblk_t block, in udf_setup_indirect_aext() argument
1930 struct super_block *sb = inode->i_sb; in udf_setup_indirect_aext()
1937 if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) in udf_setup_indirect_aext()
1939 else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG) in udf_setup_indirect_aext()
1954 mark_buffer_dirty_inode(bh, inode); in udf_setup_indirect_aext()
1983 cp_type = udf_current_aext(inode, epos, &cp_loc, &cp_len, 0); in udf_setup_indirect_aext()
1986 __udf_add_aext(inode, &nepos, &cp_loc, cp_len, 1); in udf_setup_indirect_aext()
1987 udf_write_aext(inode, epos, &nepos.block, in udf_setup_indirect_aext()
1990 __udf_add_aext(inode, epos, &nepos.block, in udf_setup_indirect_aext()
2005 int __udf_add_aext(struct inode *inode, struct extent_position *epos, in __udf_add_aext() argument
2008 struct udf_inode_info *iinfo = UDF_I(inode); in __udf_add_aext()
2021 epos->offset - udf_file_entry_alloc_offset(inode)); in __udf_add_aext()
2026 WARN_ON(epos->offset + adsize > inode->i_sb->s_blocksize); in __udf_add_aext()
2029 udf_write_aext(inode, epos, eloc, elen, inc); in __udf_add_aext()
2033 mark_inode_dirty(inode); in __udf_add_aext()
2037 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in __udf_add_aext()
2038 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in __udf_add_aext()
2044 mark_buffer_dirty_inode(epos->bh, inode); in __udf_add_aext()
2054 int udf_add_aext(struct inode *inode, struct extent_position *epos, in udf_add_aext() argument
2058 struct super_block *sb = inode->i_sb; in udf_add_aext()
2060 if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_SHORT) in udf_add_aext()
2062 else if (UDF_I(inode)->i_alloc_type == ICBTAG_FLAG_AD_LONG) in udf_add_aext()
2077 err = udf_setup_indirect_aext(inode, new_block, epos); in udf_add_aext()
2082 return __udf_add_aext(inode, epos, eloc, elen, inc); in udf_add_aext()
2085 void udf_write_aext(struct inode *inode, struct extent_position *epos, in udf_write_aext() argument
2092 struct udf_inode_info *iinfo = UDF_I(inode); in udf_write_aext()
2096 udf_file_entry_alloc_offset(inode) + in udf_write_aext()
2120 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_write_aext()
2121 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) { in udf_write_aext()
2128 mark_buffer_dirty_inode(epos->bh, inode); in udf_write_aext()
2130 mark_inode_dirty(inode); in udf_write_aext()
2143 int8_t udf_next_aext(struct inode *inode, struct extent_position *epos, in udf_next_aext() argument
2149 while ((etype = udf_current_aext(inode, epos, eloc, elen, inc)) == in udf_next_aext()
2154 udf_err(inode->i_sb, in udf_next_aext()
2156 inode->i_ino); in udf_next_aext()
2163 block = udf_get_lb_pblock(inode->i_sb, &epos->block, 0); in udf_next_aext()
2164 epos->bh = udf_tread(inode->i_sb, block); in udf_next_aext()
2174 int8_t udf_current_aext(struct inode *inode, struct extent_position *epos, in udf_current_aext() argument
2182 struct udf_inode_info *iinfo = UDF_I(inode); in udf_current_aext()
2186 epos->offset = udf_file_entry_alloc_offset(inode); in udf_current_aext()
2188 udf_file_entry_alloc_offset(inode) + in udf_current_aext()
2190 alen = udf_file_entry_alloc_offset(inode) + in udf_current_aext()
2228 static int udf_insert_aext(struct inode *inode, struct extent_position epos, in udf_insert_aext() argument
2239 while ((etype = udf_next_aext(inode, &epos, &oeloc, &oelen, 0)) != -1) { in udf_insert_aext()
2240 udf_write_aext(inode, &epos, &neloc, nelen, 1); in udf_insert_aext()
2244 err = udf_add_aext(inode, &epos, &neloc, nelen, 1); in udf_insert_aext()
2250 int8_t udf_delete_aext(struct inode *inode, struct extent_position epos) in udf_delete_aext() argument
2265 iinfo = UDF_I(inode); in udf_delete_aext()
2274 if (udf_next_aext(inode, &epos, &eloc, &elen, 1) == -1) in udf_delete_aext()
2277 while ((etype = udf_next_aext(inode, &epos, &eloc, &elen, 1)) != -1) { in udf_delete_aext()
2278 udf_write_aext(inode, &oepos, &eloc, (etype << 30) | elen, 1); in udf_delete_aext()
2291 udf_free_blocks(inode->i_sb, inode, &epos.block, 0, 1); in udf_delete_aext()
2292 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2293 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2296 mark_inode_dirty(inode); in udf_delete_aext()
2300 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_delete_aext()
2301 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_delete_aext()
2307 mark_buffer_dirty_inode(oepos.bh, inode); in udf_delete_aext()
2310 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2313 mark_inode_dirty(inode); in udf_delete_aext()
2317 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_delete_aext()
2318 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_delete_aext()
2324 mark_buffer_dirty_inode(oepos.bh, inode); in udf_delete_aext()
2334 int8_t inode_bmap(struct inode *inode, sector_t block, in inode_bmap() argument
2338 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in inode_bmap()
2343 iinfo = UDF_I(inode); in inode_bmap()
2344 if (!udf_read_extent_cache(inode, bcount, &lbcount, pos)) { in inode_bmap()
2351 etype = udf_next_aext(inode, pos, eloc, elen, 1); in inode_bmap()
2360 udf_update_extent_cache(inode, lbcount - *elen, pos); in inode_bmap()
2366 udf_pblk_t udf_block_map(struct inode *inode, sector_t block) in udf_block_map() argument
2374 down_read(&UDF_I(inode)->i_data_sem); in udf_block_map()
2376 if (inode_bmap(inode, block, &epos, &eloc, &elen, &offset) == in udf_block_map()
2378 ret = udf_get_lb_pblock(inode->i_sb, &eloc, offset); in udf_block_map()
2382 up_read(&UDF_I(inode)->i_data_sem); in udf_block_map()
2385 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_VARCONV)) in udf_block_map()