Lines Matching refs:inode
52 static int udf_update_inode(struct inode *, int);
53 static int udf_sync_inode(struct inode *inode);
54 static int udf_alloc_i_data(struct inode *inode, size_t size);
55 static sector_t inode_getblk(struct inode *, sector_t, int *, int *);
56 static int8_t udf_insert_aext(struct inode *, struct extent_position,
58 static void udf_split_extents(struct inode *, int *, int, int,
60 static void udf_prealloc_extents(struct inode *, int, int,
62 static void udf_merge_extents(struct inode *,
64 static void udf_update_extents(struct inode *,
67 static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
69 static void __udf_clear_extent_cache(struct inode *inode) in __udf_clear_extent_cache() argument
71 struct udf_inode_info *iinfo = UDF_I(inode); in __udf_clear_extent_cache()
80 static void udf_clear_extent_cache(struct inode *inode) in udf_clear_extent_cache() argument
82 struct udf_inode_info *iinfo = UDF_I(inode); in udf_clear_extent_cache()
85 __udf_clear_extent_cache(inode); in udf_clear_extent_cache()
90 static int udf_read_extent_cache(struct inode *inode, loff_t bcount, in udf_read_extent_cache() argument
93 struct udf_inode_info *iinfo = UDF_I(inode); in udf_read_extent_cache()
112 static void udf_update_extent_cache(struct inode *inode, loff_t estart, in udf_update_extent_cache() argument
115 struct udf_inode_info *iinfo = UDF_I(inode); in udf_update_extent_cache()
119 __udf_clear_extent_cache(inode); in udf_update_extent_cache()
138 void udf_evict_inode(struct inode *inode) in udf_evict_inode() argument
140 struct udf_inode_info *iinfo = UDF_I(inode); in udf_evict_inode()
143 if (!inode->i_nlink && !is_bad_inode(inode)) { 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()
148 truncate_inode_pages_final(&inode->i_data); in udf_evict_inode()
149 invalidate_inode_buffers(inode); in udf_evict_inode()
150 clear_inode(inode); in udf_evict_inode()
152 inode->i_size != iinfo->i_lenExtents) { in udf_evict_inode()
153 …udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. … in udf_evict_inode()
154 inode->i_ino, inode->i_mode, in udf_evict_inode()
155 (unsigned long long)inode->i_size, in udf_evict_inode()
160 udf_clear_extent_cache(inode); in udf_evict_inode()
162 udf_free_inode(inode); in udf_evict_inode()
168 struct inode *inode = mapping->host; in udf_write_failed() local
169 struct udf_inode_info *iinfo = UDF_I(inode); in udf_write_failed()
170 loff_t isize = inode->i_size; in udf_write_failed()
173 truncate_pagecache(inode, isize); in udf_write_failed()
176 udf_clear_extent_cache(inode); in udf_write_failed()
177 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, offset, udf_get_block); in udf_direct_IO()
254 int udf_expand_file_adinicb(struct inode *inode) in udf_expand_file_adinicb() argument
258 struct udf_inode_info *iinfo = UDF_I(inode); in udf_expand_file_adinicb()
265 WARN_ON_ONCE(!mutex_is_locked(&inode->i_mutex)); in udf_expand_file_adinicb()
267 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_file_adinicb()
272 inode->i_data.a_ops = &udf_aops; in udf_expand_file_adinicb()
274 mark_inode_dirty(inode); in udf_expand_file_adinicb()
283 page = find_or_create_page(inode->i_mapping, 0, GFP_NOFS); in udf_expand_file_adinicb()
301 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_file_adinicb()
306 inode->i_data.a_ops = &udf_aops; in udf_expand_file_adinicb()
308 err = inode->i_data.a_ops->writepage(page, &udf_wbc); in udf_expand_file_adinicb()
315 inode->i_size); in udf_expand_file_adinicb()
319 inode->i_data.a_ops = &udf_adinicb_aops; in udf_expand_file_adinicb()
323 mark_inode_dirty(inode); in udf_expand_file_adinicb()
328 struct buffer_head *udf_expand_dir_adinicb(struct inode *inode, int *block, in udf_expand_dir_adinicb() argument
338 loff_t f_pos = udf_ext0_offset(inode); in udf_expand_dir_adinicb()
339 int size = udf_ext0_offset(inode) + inode->i_size; in udf_expand_dir_adinicb()
341 struct udf_inode_info *iinfo = UDF_I(inode); in udf_expand_dir_adinicb()
343 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD)) in udf_expand_dir_adinicb()
348 if (!inode->i_size) { in udf_expand_dir_adinicb()
350 mark_inode_dirty(inode); in udf_expand_dir_adinicb()
355 *block = udf_new_block(inode->i_sb, inode, in udf_expand_dir_adinicb()
360 newblock = udf_get_pblock(inode->i_sb, *block, in udf_expand_dir_adinicb()
365 dbh = udf_tgetblk(inode->i_sb, newblock); in udf_expand_dir_adinicb()
369 memset(dbh->b_data, 0x00, inode->i_sb->s_blocksize); in udf_expand_dir_adinicb()
372 mark_buffer_dirty_inode(dbh, inode); in udf_expand_dir_adinicb()
375 f_pos & (inode->i_sb->s_blocksize - 1); in udf_expand_dir_adinicb()
381 sfi = udf_fileident_read(inode, &f_pos, &sfibh, &cfi, NULL, in udf_expand_dir_adinicb()
392 if (udf_write_fi(inode, sfi, dfi, &dfibh, sfi->impUse, in udf_expand_dir_adinicb()
400 mark_buffer_dirty_inode(dbh, inode); in udf_expand_dir_adinicb()
408 iinfo->i_lenExtents = inode->i_size; in udf_expand_dir_adinicb()
411 epos.offset = udf_file_entry_alloc_offset(inode); in udf_expand_dir_adinicb()
412 udf_add_aext(inode, &epos, &eloc, inode->i_size, 0); in udf_expand_dir_adinicb()
416 mark_inode_dirty(inode); in udf_expand_dir_adinicb()
420 static int udf_get_block(struct inode *inode, sector_t block, in udf_get_block() argument
428 phys = udf_block_map(inode, block); in udf_get_block()
430 map_bh(bh_result, inode->i_sb, phys); in udf_get_block()
436 iinfo = UDF_I(inode); in udf_get_block()
444 udf_clear_extent_cache(inode); in udf_get_block()
445 phys = inode_getblk(inode, block, &err, &new); in udf_get_block()
451 map_bh(bh_result, inode->i_sb, phys); in udf_get_block()
458 static struct buffer_head *udf_getblk(struct inode *inode, long block, in udf_getblk() argument
466 *err = udf_get_block(inode, block, &dummy, create); in udf_getblk()
468 bh = sb_getblk(inode->i_sb, dummy.b_blocknr); in udf_getblk()
471 memset(bh->b_data, 0x00, inode->i_sb->s_blocksize); in udf_getblk()
474 mark_buffer_dirty_inode(bh, inode); in udf_getblk()
483 static int udf_do_extend_file(struct inode *inode, in udf_do_extend_file() argument
490 struct super_block *sb = inode->i_sb; in udf_do_extend_file()
501 iinfo = UDF_I(inode); in udf_do_extend_file()
539 udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
543 udf_write_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
560 err = udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
569 err = udf_add_aext(inode, last_pos, &last_ext->extLocation, in udf_do_extend_file()
579 err = udf_add_aext(inode, last_pos, &prealloc_loc, in udf_do_extend_file()
599 static int udf_extend_file(struct inode *inode, loff_t newsize) in udf_extend_file() argument
606 struct super_block *sb = inode->i_sb; in udf_extend_file()
609 struct udf_inode_info *iinfo = UDF_I(inode); in udf_extend_file()
620 etype = inode_bmap(inode, first_block, &epos, &eloc, &elen, &offset); in udf_extend_file()
633 if ((!epos.bh && epos.offset == udf_file_entry_alloc_offset(inode)) || in udf_extend_file()
642 etype = udf_next_aext(inode, &epos, &extent.extLocation, in udf_extend_file()
646 err = udf_do_extend_file(inode, &epos, &extent, offset); in udf_extend_file()
656 static sector_t inode_getblk(struct inode *inode, sector_t block, in inode_getblk() argument
669 struct udf_inode_info *iinfo = UDF_I(inode); in inode_getblk()
676 prev_epos.offset = udf_file_entry_alloc_offset(inode); in inode_getblk()
680 b_off = (loff_t)block << inode->i_sb->s_blocksize_bits; in inode_getblk()
705 etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 1); in inode_getblk()
716 ((elen + inode->i_sb->s_blocksize - 1) >> in inode_getblk()
717 inode->i_sb->s_blocksize_bits); in inode_getblk()
723 offset = b_off >> inode->i_sb->s_blocksize_bits; in inode_getblk()
728 udf_next_aext(inode, &prev_epos, &tmpeloc, &tmpelen, 0); in inode_getblk()
729 udf_next_aext(inode, &cur_epos, &tmpeloc, &tmpelen, 0); in inode_getblk()
735 if (elen & (inode->i_sb->s_blocksize - 1)) { in inode_getblk()
737 ((elen + inode->i_sb->s_blocksize - 1) & in inode_getblk()
738 ~(inode->i_sb->s_blocksize - 1)); in inode_getblk()
739 udf_write_aext(inode, &cur_epos, &eloc, elen, 1); in inode_getblk()
744 newblock = udf_get_lb_pblock(inode->i_sb, &eloc, offset); in inode_getblk()
766 ret = udf_do_extend_file(inode, &prev_epos, laarr, offset); in inode_getblk()
785 inode->i_sb->s_blocksize; in inode_getblk()
807 etype = udf_next_aext(inode, &next_epos, &eloc, &elen, 0); in inode_getblk()
831 newblocknum = udf_new_block(inode->i_sb, inode, in inode_getblk()
842 iinfo->i_lenExtents += inode->i_sb->s_blocksize; in inode_getblk()
849 udf_split_extents(inode, &c, offset, newblocknum, laarr, &endnum); in inode_getblk()
856 if (S_ISREG(inode->i_mode)) in inode_getblk()
857 udf_prealloc_extents(inode, c, lastblock, laarr, &endnum); in inode_getblk()
861 udf_merge_extents(inode, laarr, &endnum); in inode_getblk()
866 udf_update_extents(inode, laarr, startnum, endnum, &prev_epos); in inode_getblk()
872 newblock = udf_get_pblock(inode->i_sb, newblocknum, in inode_getblk()
881 inode->i_ctime = current_fs_time(inode->i_sb); in inode_getblk()
883 if (IS_SYNC(inode)) in inode_getblk()
884 udf_sync_inode(inode); in inode_getblk()
886 mark_inode_dirty(inode); in inode_getblk()
891 static void udf_split_extents(struct inode *inode, int *c, int offset, in udf_split_extents() argument
896 unsigned long blocksize = inode->i_sb->s_blocksize; in udf_split_extents()
897 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_split_extents()
919 udf_free_blocks(inode->i_sb, inode, in udf_split_extents()
939 UDF_I(inode)->i_location.partitionReferenceNum; in udf_split_extents()
956 static void udf_prealloc_extents(struct inode *inode, int c, int lastblock, in udf_prealloc_extents() argument
974 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
975 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
988 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
989 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
997 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
998 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
999 int numalloc = udf_prealloc_blocks(inode->i_sb, inode, in udf_prealloc_extents()
1008 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1020 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1027 inode->i_sb->s_blocksize - 1) >> in udf_prealloc_extents()
1028 inode->i_sb->s_blocksize_bits; in udf_prealloc_extents()
1033 inode->i_sb->s_blocksize_bits); in udf_prealloc_extents()
1046 UDF_I(inode)->i_lenExtents += in udf_prealloc_extents()
1047 numalloc << inode->i_sb->s_blocksize_bits; in udf_prealloc_extents()
1052 static void udf_merge_extents(struct inode *inode, in udf_merge_extents() argument
1057 unsigned long blocksize = inode->i_sb->s_blocksize; in udf_merge_extents()
1058 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_merge_extents()
1105 udf_free_blocks(inode->i_sb, inode, &li->extLocation, 0, in udf_merge_extents()
1138 udf_free_blocks(inode->i_sb, inode, in udf_merge_extents()
1152 static void udf_update_extents(struct inode *inode, in udf_update_extents() argument
1163 udf_delete_aext(inode, *epos, laarr[i].extLocation, in udf_update_extents()
1167 udf_insert_aext(inode, *epos, laarr[i].extLocation, in udf_update_extents()
1169 udf_next_aext(inode, epos, &laarr[i].extLocation, in udf_update_extents()
1176 udf_next_aext(inode, epos, &tmploc, &tmplen, 0); in udf_update_extents()
1177 udf_write_aext(inode, epos, &laarr[i].extLocation, in udf_update_extents()
1182 struct buffer_head *udf_bread(struct inode *inode, int block, in udf_bread() argument
1187 bh = udf_getblk(inode, block, create, err); in udf_bread()
1205 int udf_setsize(struct inode *inode, loff_t newsize) in udf_setsize() argument
1209 int bsize = 1 << inode->i_blkbits; in udf_setsize()
1211 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in udf_setsize()
1212 S_ISLNK(inode->i_mode))) in udf_setsize()
1214 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) in udf_setsize()
1217 iinfo = UDF_I(inode); in udf_setsize()
1218 if (newsize > inode->i_size) { in udf_setsize()
1222 (udf_file_entry_alloc_offset(inode) + newsize)) { in udf_setsize()
1223 err = udf_expand_file_adinicb(inode); in udf_setsize()
1232 err = udf_extend_file(inode, newsize); in udf_setsize()
1238 truncate_setsize(inode, newsize); in udf_setsize()
1243 udf_clear_extent_cache(inode); in udf_setsize()
1246 udf_file_entry_alloc_offset(inode)); in udf_setsize()
1248 truncate_setsize(inode, newsize); in udf_setsize()
1252 err = block_truncate_page(inode->i_mapping, newsize, in udf_setsize()
1257 udf_clear_extent_cache(inode); in udf_setsize()
1258 truncate_setsize(inode, newsize); in udf_setsize()
1259 udf_truncate_extents(inode); in udf_setsize()
1263 inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb); in udf_setsize()
1264 if (IS_SYNC(inode)) in udf_setsize()
1265 udf_sync_inode(inode); in udf_setsize()
1267 mark_inode_dirty(inode); in udf_setsize()
1278 static int udf_read_inode(struct inode *inode, bool hidden_inode) in udf_read_inode() argument
1284 struct udf_inode_info *iinfo = UDF_I(inode); in udf_read_inode()
1285 struct udf_sb_info *sbi = UDF_SB(inode->i_sb); in udf_read_inode()
1289 int bs = inode->i_sb->s_blocksize; in udf_read_inode()
1312 bh = udf_read_ptagged(inode->i_sb, iloc, 0, &ident); in udf_read_inode()
1314 udf_err(inode->i_sb, "(ino %ld) failed !bh\n", inode->i_ino); in udf_read_inode()
1320 udf_err(inode->i_sb, "(ino %ld) failed ident=%d\n", in udf_read_inode()
1321 inode->i_ino, ident); in udf_read_inode()
1331 ibh = udf_read_ptagged(inode->i_sb, iloc, 1, &ident); in udf_read_inode()
1344 udf_err(inode->i_sb, in udf_read_inode()
1356 udf_err(inode->i_sb, "unsupported strategy type: %d\n", in udf_read_inode()
1376 ret = udf_alloc_i_data(inode, bs - in udf_read_inode()
1386 ret = udf_alloc_i_data(inode, bs - sizeof(struct fileEntry)); in udf_read_inode()
1398 ret = udf_alloc_i_data(inode, bs - in udf_read_inode()
1410 i_uid_write(inode, le32_to_cpu(fe->uid)); in udf_read_inode()
1411 if (!uid_valid(inode->i_uid) || in udf_read_inode()
1412 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_IGNORE) || in udf_read_inode()
1413 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_SET)) in udf_read_inode()
1414 inode->i_uid = UDF_SB(inode->i_sb)->s_uid; in udf_read_inode()
1416 i_gid_write(inode, le32_to_cpu(fe->gid)); in udf_read_inode()
1417 if (!gid_valid(inode->i_gid) || in udf_read_inode()
1418 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_IGNORE) || in udf_read_inode()
1419 UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_SET)) in udf_read_inode()
1420 inode->i_gid = UDF_SB(inode->i_sb)->s_gid; in udf_read_inode()
1424 inode->i_mode = sbi->s_fmode; in udf_read_inode()
1427 inode->i_mode = sbi->s_dmode; in udf_read_inode()
1429 inode->i_mode = udf_convert_permissions(fe); in udf_read_inode()
1430 inode->i_mode &= ~sbi->s_umask; in udf_read_inode()
1441 set_nlink(inode, link_count); in udf_read_inode()
1443 inode->i_size = le64_to_cpu(fe->informationLength); in udf_read_inode()
1444 iinfo->i_lenExtents = inode->i_size; in udf_read_inode()
1447 inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << in udf_read_inode()
1448 (inode->i_sb->s_blocksize_bits - 9); in udf_read_inode()
1450 if (!udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime)) in udf_read_inode()
1451 inode->i_atime = sbi->s_record_time; in udf_read_inode()
1453 if (!udf_disk_stamp_to_time(&inode->i_mtime, in udf_read_inode()
1455 inode->i_mtime = sbi->s_record_time; in udf_read_inode()
1457 if (!udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime)) in udf_read_inode()
1458 inode->i_ctime = sbi->s_record_time; in udf_read_inode()
1465 inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << in udf_read_inode()
1466 (inode->i_sb->s_blocksize_bits - 9); in udf_read_inode()
1468 if (!udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime)) in udf_read_inode()
1469 inode->i_atime = sbi->s_record_time; in udf_read_inode()
1471 if (!udf_disk_stamp_to_time(&inode->i_mtime, in udf_read_inode()
1473 inode->i_mtime = sbi->s_record_time; in udf_read_inode()
1478 if (!udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime)) in udf_read_inode()
1479 inode->i_ctime = sbi->s_record_time; in udf_read_inode()
1486 inode->i_generation = iinfo->i_unique; in udf_read_inode()
1495 if (udf_file_entry_alloc_offset(inode) + iinfo->i_lenAlloc > bs) in udf_read_inode()
1503 if (iinfo->i_lenAlloc != inode->i_size) in udf_read_inode()
1506 if (inode->i_size > bs - udf_file_entry_alloc_offset(inode)) in udf_read_inode()
1512 inode->i_op = &udf_dir_inode_operations; in udf_read_inode()
1513 inode->i_fop = &udf_dir_operations; in udf_read_inode()
1514 inode->i_mode |= S_IFDIR; in udf_read_inode()
1515 inc_nlink(inode); in udf_read_inode()
1522 inode->i_data.a_ops = &udf_adinicb_aops; in udf_read_inode()
1524 inode->i_data.a_ops = &udf_aops; in udf_read_inode()
1525 inode->i_op = &udf_file_inode_operations; in udf_read_inode()
1526 inode->i_fop = &udf_file_operations; in udf_read_inode()
1527 inode->i_mode |= S_IFREG; in udf_read_inode()
1530 inode->i_mode |= S_IFBLK; in udf_read_inode()
1533 inode->i_mode |= S_IFCHR; in udf_read_inode()
1536 init_special_inode(inode, inode->i_mode | S_IFIFO, 0); in udf_read_inode()
1539 init_special_inode(inode, inode->i_mode | S_IFSOCK, 0); in udf_read_inode()
1542 inode->i_data.a_ops = &udf_symlink_aops; in udf_read_inode()
1543 inode->i_op = &udf_symlink_inode_operations; in udf_read_inode()
1544 inode->i_mode = S_IFLNK | S_IRWXUGO; in udf_read_inode()
1556 udf_err(inode->i_sb, "(ino %ld) failed unknown file type=%d\n", in udf_read_inode()
1557 inode->i_ino, fe->icbTag.fileType); in udf_read_inode()
1560 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in udf_read_inode()
1562 (struct deviceSpec *)udf_get_extendedattr(inode, 12, 1); in udf_read_inode()
1564 init_special_inode(inode, inode->i_mode, in udf_read_inode()
1577 static int udf_alloc_i_data(struct inode *inode, size_t size) in udf_alloc_i_data() argument
1579 struct udf_inode_info *iinfo = UDF_I(inode); in udf_alloc_i_data()
1583 udf_err(inode->i_sb, "(ino %ld) no free memory\n", in udf_alloc_i_data()
1584 inode->i_ino); in udf_alloc_i_data()
1610 int udf_write_inode(struct inode *inode, struct writeback_control *wbc) in udf_write_inode() argument
1612 return udf_update_inode(inode, wbc->sync_mode == WB_SYNC_ALL); in udf_write_inode()
1615 static int udf_sync_inode(struct inode *inode) in udf_sync_inode() argument
1617 return udf_update_inode(inode, 1); in udf_sync_inode()
1620 static int udf_update_inode(struct inode *inode, int do_sync) in udf_update_inode() argument
1630 struct udf_sb_info *sbi = UDF_SB(inode->i_sb); in udf_update_inode()
1631 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in udf_update_inode()
1632 struct udf_inode_info *iinfo = UDF_I(inode); in udf_update_inode()
1634 bh = udf_tgetblk(inode->i_sb, in udf_update_inode()
1635 udf_get_lb_pblock(inode->i_sb, &iinfo->i_location, 0)); in udf_update_inode()
1642 memset(bh->b_data, 0, inode->i_sb->s_blocksize); in udf_update_inode()
1652 iinfo->i_ext.i_data, inode->i_sb->s_blocksize - in udf_update_inode()
1668 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) in udf_update_inode()
1671 fe->uid = cpu_to_le32(i_uid_read(inode)); in udf_update_inode()
1673 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) in udf_update_inode()
1676 fe->gid = cpu_to_le32(i_gid_read(inode)); in udf_update_inode()
1678 udfperms = ((inode->i_mode & S_IRWXO)) | in udf_update_inode()
1679 ((inode->i_mode & S_IRWXG) << 2) | in udf_update_inode()
1680 ((inode->i_mode & S_IRWXU) << 4); in udf_update_inode()
1688 if (S_ISDIR(inode->i_mode) && inode->i_nlink > 0) in udf_update_inode()
1689 fe->fileLinkCount = cpu_to_le16(inode->i_nlink - 1); in udf_update_inode()
1691 fe->fileLinkCount = cpu_to_le16(inode->i_nlink); in udf_update_inode()
1693 fe->informationLength = cpu_to_le64(inode->i_size); in udf_update_inode()
1695 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) { in udf_update_inode()
1698 (struct deviceSpec *)udf_get_extendedattr(inode, 12, 1); in udf_update_inode()
1701 udf_add_extendedattr(inode, in udf_update_inode()
1716 dsea->majorDeviceIdent = cpu_to_le32(imajor(inode)); in udf_update_inode()
1717 dsea->minorDeviceIdent = cpu_to_le32(iminor(inode)); in udf_update_inode()
1724 (inode->i_blocks + (1 << (blocksize_bits - 9)) - 1) >> in udf_update_inode()
1730 inode->i_sb->s_blocksize - sizeof(struct fileEntry)); in udf_update_inode()
1733 udf_time_to_disk_stamp(&fe->accessTime, inode->i_atime); in udf_update_inode()
1734 udf_time_to_disk_stamp(&fe->modificationTime, inode->i_mtime); in udf_update_inode()
1735 udf_time_to_disk_stamp(&fe->attrTime, inode->i_ctime); in udf_update_inode()
1749 inode->i_sb->s_blocksize - in udf_update_inode()
1751 efe->objectSize = cpu_to_le64(inode->i_size); in udf_update_inode()
1754 if (iinfo->i_crtime.tv_sec > inode->i_atime.tv_sec || in udf_update_inode()
1755 (iinfo->i_crtime.tv_sec == inode->i_atime.tv_sec && in udf_update_inode()
1756 iinfo->i_crtime.tv_nsec > inode->i_atime.tv_nsec)) in udf_update_inode()
1757 iinfo->i_crtime = inode->i_atime; in udf_update_inode()
1759 if (iinfo->i_crtime.tv_sec > inode->i_mtime.tv_sec || in udf_update_inode()
1760 (iinfo->i_crtime.tv_sec == inode->i_mtime.tv_sec && in udf_update_inode()
1761 iinfo->i_crtime.tv_nsec > inode->i_mtime.tv_nsec)) in udf_update_inode()
1762 iinfo->i_crtime = inode->i_mtime; in udf_update_inode()
1764 if (iinfo->i_crtime.tv_sec > inode->i_ctime.tv_sec || in udf_update_inode()
1765 (iinfo->i_crtime.tv_sec == inode->i_ctime.tv_sec && in udf_update_inode()
1766 iinfo->i_crtime.tv_nsec > inode->i_ctime.tv_nsec)) in udf_update_inode()
1767 iinfo->i_crtime = inode->i_ctime; in udf_update_inode()
1769 udf_time_to_disk_stamp(&efe->accessTime, inode->i_atime); in udf_update_inode()
1770 udf_time_to_disk_stamp(&efe->modificationTime, inode->i_mtime); in udf_update_inode()
1772 udf_time_to_disk_stamp(&efe->attrTime, inode->i_ctime); in udf_update_inode()
1794 if (S_ISDIR(inode->i_mode)) in udf_update_inode()
1796 else if (S_ISREG(inode->i_mode)) in udf_update_inode()
1798 else if (S_ISLNK(inode->i_mode)) in udf_update_inode()
1800 else if (S_ISBLK(inode->i_mode)) in udf_update_inode()
1802 else if (S_ISCHR(inode->i_mode)) in udf_update_inode()
1804 else if (S_ISFIFO(inode->i_mode)) in udf_update_inode()
1806 else if (S_ISSOCK(inode->i_mode)) in udf_update_inode()
1810 ((inode->i_mode & S_ISUID) ? ICBTAG_FLAG_SETUID : 0) | in udf_update_inode()
1811 ((inode->i_mode & S_ISGID) ? ICBTAG_FLAG_SETGID : 0) | in udf_update_inode()
1812 ((inode->i_mode & S_ISVTX) ? ICBTAG_FLAG_STICKY : 0) | in udf_update_inode()
1840 udf_warn(inode->i_sb, "IO error syncing udf inode [%08lx]\n", in udf_update_inode()
1841 inode->i_ino); in udf_update_inode()
1850 struct inode *__udf_iget(struct super_block *sb, struct kernel_lb_addr *ino, in __udf_iget()
1854 struct inode *inode = iget_locked(sb, block); in __udf_iget() local
1857 if (!inode) in __udf_iget()
1860 if (!(inode->i_state & I_NEW)) in __udf_iget()
1861 return inode; in __udf_iget()
1863 memcpy(&UDF_I(inode)->i_location, ino, sizeof(struct kernel_lb_addr)); in __udf_iget()
1864 err = udf_read_inode(inode, hidden_inode); in __udf_iget()
1866 iget_failed(inode); in __udf_iget()
1869 unlock_new_inode(inode); in __udf_iget()
1871 return inode; in __udf_iget()
1874 int udf_add_aext(struct inode *inode, struct extent_position *epos, in udf_add_aext() argument
1882 struct udf_inode_info *iinfo = UDF_I(inode); in udf_add_aext()
1886 udf_file_entry_alloc_offset(inode) + in udf_add_aext()
1898 if (epos->offset + (2 * adsize) > inode->i_sb->s_blocksize) { in udf_add_aext()
1904 epos->block.logicalBlockNum = udf_new_block(inode->i_sb, NULL, in udf_add_aext()
1909 nbh = udf_tgetblk(inode->i_sb, udf_get_lb_pblock(inode->i_sb, in udf_add_aext()
1915 memset(nbh->b_data, 0x00, inode->i_sb->s_blocksize); in udf_add_aext()
1918 mark_buffer_dirty_inode(nbh, inode); in udf_add_aext()
1921 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT)) in udf_add_aext()
1924 if (epos->offset + adsize > inode->i_sb->s_blocksize) { in udf_add_aext()
1942 mark_inode_dirty(inode); in udf_add_aext()
1945 if (UDF_SB(inode->i_sb)->s_udfrev >= 0x0200) in udf_add_aext()
1955 inode->i_sb->s_blocksize); in udf_add_aext()
1962 inode->i_sb->s_blocksize); in udf_add_aext()
1968 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_add_aext()
1969 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_add_aext()
1974 mark_buffer_dirty_inode(epos->bh, inode); in udf_add_aext()
1977 mark_inode_dirty(inode); in udf_add_aext()
1982 udf_write_aext(inode, epos, eloc, elen, inc); in udf_add_aext()
1986 mark_inode_dirty(inode); in udf_add_aext()
1990 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_add_aext()
1991 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_add_aext()
1997 mark_buffer_dirty_inode(epos->bh, inode); in udf_add_aext()
2003 void udf_write_aext(struct inode *inode, struct extent_position *epos, in udf_write_aext() argument
2010 struct udf_inode_info *iinfo = UDF_I(inode); in udf_write_aext()
2014 udf_file_entry_alloc_offset(inode) + in udf_write_aext()
2038 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_write_aext()
2039 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) { in udf_write_aext()
2046 mark_buffer_dirty_inode(epos->bh, inode); in udf_write_aext()
2048 mark_inode_dirty(inode); in udf_write_aext()
2061 int8_t udf_next_aext(struct inode *inode, struct extent_position *epos, in udf_next_aext() argument
2067 while ((etype = udf_current_aext(inode, epos, eloc, elen, inc)) == in udf_next_aext()
2072 udf_err(inode->i_sb, in udf_next_aext()
2074 inode->i_ino); in udf_next_aext()
2081 block = udf_get_lb_pblock(inode->i_sb, &epos->block, 0); in udf_next_aext()
2082 epos->bh = udf_tread(inode->i_sb, block); in udf_next_aext()
2092 int8_t udf_current_aext(struct inode *inode, struct extent_position *epos, in udf_current_aext() argument
2100 struct udf_inode_info *iinfo = UDF_I(inode); in udf_current_aext()
2104 epos->offset = udf_file_entry_alloc_offset(inode); in udf_current_aext()
2106 udf_file_entry_alloc_offset(inode) + in udf_current_aext()
2108 alen = udf_file_entry_alloc_offset(inode) + in udf_current_aext()
2146 static int8_t udf_insert_aext(struct inode *inode, struct extent_position epos, in udf_insert_aext() argument
2156 while ((etype = udf_next_aext(inode, &epos, &oeloc, &oelen, 0)) != -1) { in udf_insert_aext()
2157 udf_write_aext(inode, &epos, &neloc, nelen, 1); in udf_insert_aext()
2161 udf_add_aext(inode, &epos, &neloc, nelen, 1); in udf_insert_aext()
2167 int8_t udf_delete_aext(struct inode *inode, struct extent_position epos, in udf_delete_aext() argument
2181 iinfo = UDF_I(inode); in udf_delete_aext()
2190 if (udf_next_aext(inode, &epos, &eloc, &elen, 1) == -1) in udf_delete_aext()
2193 while ((etype = udf_next_aext(inode, &epos, &eloc, &elen, 1)) != -1) { in udf_delete_aext()
2194 udf_write_aext(inode, &oepos, &eloc, (etype << 30) | elen, 1); in udf_delete_aext()
2207 udf_free_blocks(inode->i_sb, inode, &epos.block, 0, 1); in udf_delete_aext()
2208 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2209 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2212 mark_inode_dirty(inode); in udf_delete_aext()
2216 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_delete_aext()
2217 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_delete_aext()
2223 mark_buffer_dirty_inode(oepos.bh, inode); in udf_delete_aext()
2226 udf_write_aext(inode, &oepos, &eloc, elen, 1); in udf_delete_aext()
2229 mark_inode_dirty(inode); in udf_delete_aext()
2233 if (!UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_STRICT) || in udf_delete_aext()
2234 UDF_SB(inode->i_sb)->s_udfrev >= 0x0201) in udf_delete_aext()
2240 mark_buffer_dirty_inode(oepos.bh, inode); in udf_delete_aext()
2250 int8_t inode_bmap(struct inode *inode, sector_t block, in inode_bmap() argument
2254 unsigned char blocksize_bits = inode->i_sb->s_blocksize_bits; in inode_bmap()
2260 iinfo = UDF_I(inode); in inode_bmap()
2261 if (!udf_read_extent_cache(inode, bcount, &lbcount, pos)) { in inode_bmap()
2268 etype = udf_next_aext(inode, pos, eloc, elen, 1); in inode_bmap()
2277 udf_update_extent_cache(inode, lbcount - *elen, pos, 1); in inode_bmap()
2283 long udf_block_map(struct inode *inode, sector_t block) in udf_block_map() argument
2291 down_read(&UDF_I(inode)->i_data_sem); in udf_block_map()
2293 if (inode_bmap(inode, block, &epos, &eloc, &elen, &offset) == in udf_block_map()
2295 ret = udf_get_lb_pblock(inode->i_sb, &eloc, offset); in udf_block_map()
2299 up_read(&UDF_I(inode)->i_data_sem); in udf_block_map()
2302 if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_VARCONV)) in udf_block_map()