Lines Matching +full:re +full:- +full:attached

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
37 return INODE_ITEM(lip)->ili_inode->i_ino; in xfs_inode_item_sort()
42 * per-modification inode state changes are applied. This includes VFS inode
48 * require AGI -> inode cluster buffer lock order. The inode cluster buffer is
49 * not locked until ->precommit, so it happens after everything else has been
52 * Further, we have AGI -> AGF lock ordering, and with O_TMPFILE handling we
53 * have AGI -> AGF -> iunlink item -> inode cluster buffer lock order. Hence we
60 * move the pinning of the inode cluster buffer to a ->precommit operation. This
63 * transaction. i.e. we ensure the lock order is always AGI -> AGF -> inode
76 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_precommit()
78 unsigned int flags = iip->ili_dirty_flags; in xfs_inode_item_precommit()
82 * don't matter - we either will need an extra transaction in 24 hours in xfs_inode_item_precommit()
86 if (inode->i_state & I_DIRTY_TIME) { in xfs_inode_item_precommit()
87 spin_lock(&inode->i_lock); in xfs_inode_item_precommit()
88 inode->i_state &= ~I_DIRTY_TIME; in xfs_inode_item_precommit()
89 spin_unlock(&inode->i_lock); in xfs_inode_item_precommit()
93 * If we're updating the inode core or the timestamps and it's possible in xfs_inode_item_precommit()
97 xfs_has_bigtime(ip->i_mount) && in xfs_inode_item_precommit()
99 ip->i_diflags2 |= XFS_DIFLAG2_BIGTIME; in xfs_inode_item_precommit()
106 * and extszinherit flags set. If we're logging a directory that is in xfs_inode_item_precommit()
109 if ((ip->i_diflags & XFS_DIFLAG_RTINHERIT) && in xfs_inode_item_precommit()
110 (ip->i_diflags & XFS_DIFLAG_EXTSZINHERIT) && in xfs_inode_item_precommit()
111 xfs_extlen_to_rtxmod(ip->i_mount, ip->i_extsize) > 0) { in xfs_inode_item_precommit()
112 ip->i_diflags &= ~(XFS_DIFLAG_EXTSIZE | in xfs_inode_item_precommit()
114 ip->i_extsize = 0; in xfs_inode_item_precommit()
122 * to XFS_ILOG_CORE so that the actual on-disk dirty tracking in xfs_inode_item_precommit()
125 spin_lock(&iip->ili_lock); in xfs_inode_item_precommit()
126 iip->ili_fsync_fields |= (flags & ~XFS_ILOG_IVERSION); in xfs_inode_item_precommit()
130 if (!iip->ili_item.li_buf) { in xfs_inode_item_precommit()
137 * buffer attached to the item, we know that there is no IO in in xfs_inode_item_precommit()
143 spin_unlock(&iip->ili_lock); in xfs_inode_item_precommit()
144 error = xfs_imap_to_bp(ip->i_mount, tp, &ip->i_imap, &bp); in xfs_inode_item_precommit()
150 * don't want the buffer to remain attached to the transaction. in xfs_inode_item_precommit()
152 * we've attached the inode log item to the buffer log item in xfs_inode_item_precommit()
156 spin_lock(&iip->ili_lock); in xfs_inode_item_precommit()
157 iip->ili_item.li_buf = bp; in xfs_inode_item_precommit()
158 bp->b_flags |= _XBF_INODES; in xfs_inode_item_precommit()
159 list_add_tail(&iip->ili_item.li_bio_list, &bp->b_li_list); in xfs_inode_item_precommit()
169 iip->ili_fields |= (flags | iip->ili_last_fields); in xfs_inode_item_precommit()
170 spin_unlock(&iip->ili_lock); in xfs_inode_item_precommit()
176 iip->ili_dirty_flags = 0; in xfs_inode_item_precommit()
190 * inode gets -smaller- rather than stays the same size as the previously logged
200 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_data_fork_size()
202 switch (ip->i_df.if_format) { in xfs_inode_item_data_fork_size()
204 if ((iip->ili_fields & XFS_ILOG_DEXT) && in xfs_inode_item_data_fork_size()
205 ip->i_df.if_nextents > 0 && in xfs_inode_item_data_fork_size()
206 ip->i_df.if_bytes > 0) { in xfs_inode_item_data_fork_size()
213 if ((iip->ili_fields & XFS_ILOG_DBROOT) && in xfs_inode_item_data_fork_size()
214 ip->i_df.if_broot_bytes > 0) { in xfs_inode_item_data_fork_size()
215 *nbytes += ip->i_df.if_broot_bytes; in xfs_inode_item_data_fork_size()
220 if ((iip->ili_fields & XFS_ILOG_DDATA) && in xfs_inode_item_data_fork_size()
221 ip->i_df.if_bytes > 0) { in xfs_inode_item_data_fork_size()
222 *nbytes += xlog_calc_iovec_len(ip->i_df.if_bytes); in xfs_inode_item_data_fork_size()
241 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_attr_fork_size()
243 switch (ip->i_af.if_format) { in xfs_inode_item_attr_fork_size()
245 if ((iip->ili_fields & XFS_ILOG_AEXT) && in xfs_inode_item_attr_fork_size()
246 ip->i_af.if_nextents > 0 && in xfs_inode_item_attr_fork_size()
247 ip->i_af.if_bytes > 0) { in xfs_inode_item_attr_fork_size()
254 if ((iip->ili_fields & XFS_ILOG_ABROOT) && in xfs_inode_item_attr_fork_size()
255 ip->i_af.if_broot_bytes > 0) { in xfs_inode_item_attr_fork_size()
256 *nbytes += ip->i_af.if_broot_bytes; in xfs_inode_item_attr_fork_size()
261 if ((iip->ili_fields & XFS_ILOG_ADATA) && in xfs_inode_item_attr_fork_size()
262 ip->i_af.if_bytes > 0) { in xfs_inode_item_attr_fork_size()
263 *nbytes += xlog_calc_iovec_len(ip->i_af.if_bytes); in xfs_inode_item_attr_fork_size()
277 * inode core, and possibly one for the inode data/extents/b-tree root
278 * and one for the inode attribute data/extents/b-tree root.
287 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_size()
291 xfs_log_dinode_size(ip->i_mount); in xfs_inode_item_size()
305 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_format_data_fork()
308 switch (ip->i_df.if_format) { in xfs_inode_item_format_data_fork()
310 iip->ili_fields &= in xfs_inode_item_format_data_fork()
313 if ((iip->ili_fields & XFS_ILOG_DEXT) && in xfs_inode_item_format_data_fork()
314 ip->i_df.if_nextents > 0 && in xfs_inode_item_format_data_fork()
315 ip->i_df.if_bytes > 0) { in xfs_inode_item_format_data_fork()
318 ASSERT(xfs_iext_count(&ip->i_df) > 0); in xfs_inode_item_format_data_fork()
324 ASSERT(data_bytes <= ip->i_df.if_bytes); in xfs_inode_item_format_data_fork()
326 ilf->ilf_dsize = data_bytes; in xfs_inode_item_format_data_fork()
327 ilf->ilf_size++; in xfs_inode_item_format_data_fork()
329 iip->ili_fields &= ~XFS_ILOG_DEXT; in xfs_inode_item_format_data_fork()
333 iip->ili_fields &= in xfs_inode_item_format_data_fork()
336 if ((iip->ili_fields & XFS_ILOG_DBROOT) && in xfs_inode_item_format_data_fork()
337 ip->i_df.if_broot_bytes > 0) { in xfs_inode_item_format_data_fork()
338 ASSERT(ip->i_df.if_broot != NULL); in xfs_inode_item_format_data_fork()
340 ip->i_df.if_broot, in xfs_inode_item_format_data_fork()
341 ip->i_df.if_broot_bytes); in xfs_inode_item_format_data_fork()
342 ilf->ilf_dsize = ip->i_df.if_broot_bytes; in xfs_inode_item_format_data_fork()
343 ilf->ilf_size++; in xfs_inode_item_format_data_fork()
345 ASSERT(!(iip->ili_fields & in xfs_inode_item_format_data_fork()
347 iip->ili_fields &= ~XFS_ILOG_DBROOT; in xfs_inode_item_format_data_fork()
351 iip->ili_fields &= in xfs_inode_item_format_data_fork()
353 if ((iip->ili_fields & XFS_ILOG_DDATA) && in xfs_inode_item_format_data_fork()
354 ip->i_df.if_bytes > 0) { in xfs_inode_item_format_data_fork()
355 ASSERT(ip->i_df.if_data != NULL); in xfs_inode_item_format_data_fork()
356 ASSERT(ip->i_disk_size > 0); in xfs_inode_item_format_data_fork()
358 ip->i_df.if_data, ip->i_df.if_bytes); in xfs_inode_item_format_data_fork()
359 ilf->ilf_dsize = (unsigned)ip->i_df.if_bytes; in xfs_inode_item_format_data_fork()
360 ilf->ilf_size++; in xfs_inode_item_format_data_fork()
362 iip->ili_fields &= ~XFS_ILOG_DDATA; in xfs_inode_item_format_data_fork()
366 iip->ili_fields &= in xfs_inode_item_format_data_fork()
368 if (iip->ili_fields & XFS_ILOG_DEV) in xfs_inode_item_format_data_fork()
369 ilf->ilf_u.ilfu_rdev = sysv_encode_dev(VFS_I(ip)->i_rdev); in xfs_inode_item_format_data_fork()
384 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_format_attr_fork()
387 switch (ip->i_af.if_format) { in xfs_inode_item_format_attr_fork()
389 iip->ili_fields &= in xfs_inode_item_format_attr_fork()
392 if ((iip->ili_fields & XFS_ILOG_AEXT) && in xfs_inode_item_format_attr_fork()
393 ip->i_af.if_nextents > 0 && in xfs_inode_item_format_attr_fork()
394 ip->i_af.if_bytes > 0) { in xfs_inode_item_format_attr_fork()
397 ASSERT(xfs_iext_count(&ip->i_af) == in xfs_inode_item_format_attr_fork()
398 ip->i_af.if_nextents); in xfs_inode_item_format_attr_fork()
404 ilf->ilf_asize = data_bytes; in xfs_inode_item_format_attr_fork()
405 ilf->ilf_size++; in xfs_inode_item_format_attr_fork()
407 iip->ili_fields &= ~XFS_ILOG_AEXT; in xfs_inode_item_format_attr_fork()
411 iip->ili_fields &= in xfs_inode_item_format_attr_fork()
414 if ((iip->ili_fields & XFS_ILOG_ABROOT) && in xfs_inode_item_format_attr_fork()
415 ip->i_af.if_broot_bytes > 0) { in xfs_inode_item_format_attr_fork()
416 ASSERT(ip->i_af.if_broot != NULL); in xfs_inode_item_format_attr_fork()
419 ip->i_af.if_broot, in xfs_inode_item_format_attr_fork()
420 ip->i_af.if_broot_bytes); in xfs_inode_item_format_attr_fork()
421 ilf->ilf_asize = ip->i_af.if_broot_bytes; in xfs_inode_item_format_attr_fork()
422 ilf->ilf_size++; in xfs_inode_item_format_attr_fork()
424 iip->ili_fields &= ~XFS_ILOG_ABROOT; in xfs_inode_item_format_attr_fork()
428 iip->ili_fields &= in xfs_inode_item_format_attr_fork()
431 if ((iip->ili_fields & XFS_ILOG_ADATA) && in xfs_inode_item_format_attr_fork()
432 ip->i_af.if_bytes > 0) { in xfs_inode_item_format_attr_fork()
433 ASSERT(ip->i_af.if_data != NULL); in xfs_inode_item_format_attr_fork()
435 ip->i_af.if_data, ip->i_af.if_bytes); in xfs_inode_item_format_attr_fork()
436 ilf->ilf_asize = (unsigned)ip->i_af.if_bytes; in xfs_inode_item_format_attr_fork()
437 ilf->ilf_size++; in xfs_inode_item_format_attr_fork()
439 iip->ili_fields &= ~XFS_ILOG_ADATA; in xfs_inode_item_format_attr_fork()
464 lits->t_sec = tv.tv_sec; in xfs_inode_to_log_dinode_ts()
465 lits->t_nsec = tv.tv_nsec; in xfs_inode_to_log_dinode_ts()
471 * The legacy DMAPI fields are only present in the on-disk and in-log inodes,
472 * but not in the in-memory one. But we are guaranteed to have an inode buffer
473 * in memory when logging an inode, so we can just copy it from the on-disk
474 * inode to the in-log inode here so that recovery of file system with these
475 * fields set to non-zero values doesn't lose them. For all other cases we zero
485 dip = xfs_buf_offset(ip->i_itemp->ili_item.li_buf, in xfs_copy_dm_fields_to_log_dinode()
486 ip->i_imap.im_boffset); in xfs_copy_dm_fields_to_log_dinode()
489 to->di_dmevmask = be32_to_cpu(dip->di_dmevmask); in xfs_copy_dm_fields_to_log_dinode()
490 to->di_dmstate = be16_to_cpu(dip->di_dmstate); in xfs_copy_dm_fields_to_log_dinode()
492 to->di_dmevmask = 0; in xfs_copy_dm_fields_to_log_dinode()
493 to->di_dmstate = 0; in xfs_copy_dm_fields_to_log_dinode()
503 to->di_big_nextents = xfs_ifork_nextents(&ip->i_df); in xfs_inode_to_log_dinode_iext_counters()
504 to->di_big_anextents = xfs_ifork_nextents(&ip->i_af); in xfs_inode_to_log_dinode_iext_counters()
505 to->di_nrext64_pad = 0; in xfs_inode_to_log_dinode_iext_counters()
507 to->di_nextents = xfs_ifork_nextents(&ip->i_df); in xfs_inode_to_log_dinode_iext_counters()
508 to->di_anextents = xfs_ifork_nextents(&ip->i_af); in xfs_inode_to_log_dinode_iext_counters()
520 to->di_magic = XFS_DINODE_MAGIC; in xfs_inode_to_log_dinode()
521 to->di_format = xfs_ifork_format(&ip->i_df); in xfs_inode_to_log_dinode()
522 to->di_uid = i_uid_read(inode); in xfs_inode_to_log_dinode()
523 to->di_gid = i_gid_read(inode); in xfs_inode_to_log_dinode()
524 to->di_projid_lo = ip->i_projid & 0xffff; in xfs_inode_to_log_dinode()
525 to->di_projid_hi = ip->i_projid >> 16; in xfs_inode_to_log_dinode()
527 memset(to->di_pad3, 0, sizeof(to->di_pad3)); in xfs_inode_to_log_dinode()
528 to->di_atime = xfs_inode_to_log_dinode_ts(ip, inode_get_atime(inode)); in xfs_inode_to_log_dinode()
529 to->di_mtime = xfs_inode_to_log_dinode_ts(ip, inode_get_mtime(inode)); in xfs_inode_to_log_dinode()
530 to->di_ctime = xfs_inode_to_log_dinode_ts(ip, inode_get_ctime(inode)); in xfs_inode_to_log_dinode()
531 to->di_nlink = inode->i_nlink; in xfs_inode_to_log_dinode()
532 to->di_gen = inode->i_generation; in xfs_inode_to_log_dinode()
533 to->di_mode = inode->i_mode; in xfs_inode_to_log_dinode()
535 to->di_size = ip->i_disk_size; in xfs_inode_to_log_dinode()
536 to->di_nblocks = ip->i_nblocks; in xfs_inode_to_log_dinode()
537 to->di_extsize = ip->i_extsize; in xfs_inode_to_log_dinode()
538 to->di_forkoff = ip->i_forkoff; in xfs_inode_to_log_dinode()
539 to->di_aformat = xfs_ifork_format(&ip->i_af); in xfs_inode_to_log_dinode()
540 to->di_flags = ip->i_diflags; in xfs_inode_to_log_dinode()
545 to->di_next_unlinked = NULLAGINO; in xfs_inode_to_log_dinode()
547 if (xfs_has_v3inodes(ip->i_mount)) { in xfs_inode_to_log_dinode()
548 to->di_version = 3; in xfs_inode_to_log_dinode()
549 to->di_changecount = inode_peek_iversion(inode); in xfs_inode_to_log_dinode()
550 to->di_crtime = xfs_inode_to_log_dinode_ts(ip, ip->i_crtime); in xfs_inode_to_log_dinode()
551 to->di_flags2 = ip->i_diflags2; in xfs_inode_to_log_dinode()
552 to->di_cowextsize = ip->i_cowextsize; in xfs_inode_to_log_dinode()
553 to->di_ino = ip->i_ino; in xfs_inode_to_log_dinode()
554 to->di_lsn = lsn; in xfs_inode_to_log_dinode()
555 memset(to->di_pad2, 0, sizeof(to->di_pad2)); in xfs_inode_to_log_dinode()
556 uuid_copy(&to->di_uuid, &ip->i_mount->m_sb.sb_meta_uuid); in xfs_inode_to_log_dinode()
557 to->di_v3_pad = 0; in xfs_inode_to_log_dinode()
560 to->di_crc = 0; in xfs_inode_to_log_dinode()
562 to->di_version = 2; in xfs_inode_to_log_dinode()
563 to->di_flushiter = ip->i_flushiter; in xfs_inode_to_log_dinode()
564 memset(to->di_v2_pad, 0, sizeof(to->di_v2_pad)); in xfs_inode_to_log_dinode()
584 xfs_inode_to_log_dinode(ip, dic, ip->i_itemp->ili_item.li_lsn); in xfs_inode_item_format_core()
585 xlog_finish_iovec(lv, *vecp, xfs_log_dinode_size(ip->i_mount)); in xfs_inode_item_format_core()
591 * the second with the on-disk inode structure, and a possible third and/or
592 * fourth with the inode data/extents/b-tree root and inode attributes
593 * data/extents/b-tree root.
606 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_format()
611 ilf->ilf_type = XFS_LI_INODE; in xfs_inode_item_format()
612 ilf->ilf_ino = ip->i_ino; in xfs_inode_item_format()
613 ilf->ilf_blkno = ip->i_imap.im_blkno; in xfs_inode_item_format()
614 ilf->ilf_len = ip->i_imap.im_len; in xfs_inode_item_format()
615 ilf->ilf_boffset = ip->i_imap.im_boffset; in xfs_inode_item_format()
616 ilf->ilf_fields = XFS_ILOG_CORE; in xfs_inode_item_format()
617 ilf->ilf_size = 2; /* format + core */ in xfs_inode_item_format()
623 ilf->ilf_dsize = 0; in xfs_inode_item_format()
624 ilf->ilf_asize = 0; in xfs_inode_item_format()
625 ilf->ilf_pad = 0; in xfs_inode_item_format()
626 memset(&ilf->ilf_u, 0, sizeof(ilf->ilf_u)); in xfs_inode_item_format()
635 iip->ili_fields &= in xfs_inode_item_format()
640 ilf->ilf_fields |= (iip->ili_fields & ~XFS_ILOG_TIMESTAMP); in xfs_inode_item_format()
651 struct xfs_inode *ip = INODE_ITEM(lip)->ili_inode; in xfs_inode_item_pin()
654 ASSERT(lip->li_buf); in xfs_inode_item_pin()
657 atomic_inc(&ip->i_pincount); in xfs_inode_item_pin()
670 * will be no buffer attached to the log item, but the inode will be marked
678 struct xfs_inode *ip = INODE_ITEM(lip)->ili_inode; in xfs_inode_item_unpin()
681 ASSERT(lip->li_buf || xfs_iflags_test(ip, XFS_ISTALE)); in xfs_inode_item_unpin()
682 ASSERT(atomic_read(&ip->i_pincount) > 0); in xfs_inode_item_unpin()
683 if (atomic_dec_and_test(&ip->i_pincount)) in xfs_inode_item_unpin()
684 wake_up_bit(&ip->i_flags, __XFS_IPINNED_BIT); in xfs_inode_item_unpin()
691 __releases(&lip->li_ailp->ail_lock) in xfs_inode_item_push()
692 __acquires(&lip->li_ailp->ail_lock) in xfs_inode_item_push()
695 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_push()
696 struct xfs_buf *bp = lip->li_buf; in xfs_inode_item_push()
700 if (!bp || (ip->i_flags & XFS_ISTALE)) { in xfs_inode_item_push()
719 spin_unlock(&lip->li_ailp->ail_lock); in xfs_inode_item_push()
738 if (error == -EAGAIN) in xfs_inode_item_push()
743 spin_lock(&lip->li_ailp->ail_lock); in xfs_inode_item_push()
755 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_release()
758 ASSERT(ip->i_itemp != NULL); in xfs_inode_item_release()
761 lock_flags = iip->ili_lock_flags; in xfs_inode_item_release()
762 iip->ili_lock_flags = 0; in xfs_inode_item_release()
770 * at the given lsn. Since we always re-log all dirty data in an inode, the
775 * don't want to (re-)insert this inode into the AIL. There is a race condition
785 * To avoid this, just unpin the inode directly and return a LSN of -1 so the
795 struct xfs_inode *ip = iip->ili_inode; in xfs_inode_item_committed()
799 return -1; in xfs_inode_item_committed()
809 INODE_ITEM(lip)->ili_commit_seq = seq; in xfs_inode_item_committing()
828 * Initialize the inode log item for a newly allocated (in-core) inode.
837 ASSERT(ip->i_itemp == NULL); in xfs_inode_item_init()
838 iip = ip->i_itemp = kmem_cache_zalloc(xfs_ili_cache, in xfs_inode_item_init()
841 iip->ili_inode = ip; in xfs_inode_item_init()
842 spin_lock_init(&iip->ili_lock); in xfs_inode_item_init()
843 xfs_log_item_init(mp, &iip->ili_item, XFS_LI_INODE, in xfs_inode_item_init()
854 struct xfs_inode_log_item *iip = ip->i_itemp; in xfs_inode_item_destroy()
856 ASSERT(iip->ili_item.li_buf == NULL); in xfs_inode_item_destroy()
858 ip->i_itemp = NULL; in xfs_inode_item_destroy()
859 kmem_free(iip->ili_item.li_lv_shadow); in xfs_inode_item_destroy()
878 spin_lock(&ailp->ail_lock); in xfs_iflush_ail_updates()
882 clear_bit(XFS_LI_FAILED, &lip->li_flags); in xfs_iflush_ail_updates()
883 if (INODE_ITEM(lip)->ili_flush_lsn != lip->li_lsn) in xfs_iflush_ail_updates()
892 if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) { in xfs_iflush_ail_updates()
893 ASSERT(xlog_is_shutdown(lip->li_log)); in xfs_iflush_ail_updates()
921 spin_lock(&iip->ili_lock); in xfs_iflush_finish()
928 ASSERT(iip->ili_item.li_buf == bp); in xfs_iflush_finish()
929 if (!iip->ili_fields) { in xfs_iflush_finish()
930 iip->ili_item.li_buf = NULL; in xfs_iflush_finish()
931 list_del_init(&lip->li_bio_list); in xfs_iflush_finish()
934 iip->ili_last_fields = 0; in xfs_iflush_finish()
935 iip->ili_flush_lsn = 0; in xfs_iflush_finish()
936 spin_unlock(&iip->ili_lock); in xfs_iflush_finish()
937 xfs_iflags_clear(iip->ili_inode, XFS_IFLUSHING); in xfs_iflush_finish()
945 * attached to the buffer from the AIL if they have not been re-logged and
957 * Pull the attached inodes from the buffer one at a time and take the in xfs_buf_inode_iodone()
960 list_for_each_entry_safe(lip, n, &bp->b_li_list, li_bio_list) { in xfs_buf_inode_iodone()
963 if (xfs_iflags_test(iip->ili_inode, XFS_ISTALE)) { in xfs_buf_inode_iodone()
964 xfs_iflush_abort(iip->ili_inode); in xfs_buf_inode_iodone()
967 if (!iip->ili_last_fields) in xfs_buf_inode_iodone()
971 if (iip->ili_flush_lsn == lip->li_lsn || in xfs_buf_inode_iodone()
972 test_bit(XFS_LI_FAILED, &lip->li_flags)) in xfs_buf_inode_iodone()
973 list_move_tail(&lip->li_bio_list, &ail_updates); in xfs_buf_inode_iodone()
975 list_move_tail(&lip->li_bio_list, &flushed_inodes); in xfs_buf_inode_iodone()
979 xfs_iflush_ail_updates(bp->b_mount->m_ail, &ail_updates); in xfs_buf_inode_iodone()
985 list_splice_tail(&flushed_inodes, &bp->b_li_list); in xfs_buf_inode_iodone()
994 list_for_each_entry(lip, &bp->b_li_list, li_bio_list) in xfs_buf_inode_io_fail()
995 set_bit(XFS_LI_FAILED, &lip->li_flags); in xfs_buf_inode_io_fail()
1008 iip->ili_last_fields = 0; in xfs_iflush_abort_clean()
1009 iip->ili_fields = 0; in xfs_iflush_abort_clean()
1010 iip->ili_fsync_fields = 0; in xfs_iflush_abort_clean()
1011 iip->ili_flush_lsn = 0; in xfs_iflush_abort_clean()
1012 iip->ili_item.li_buf = NULL; in xfs_iflush_abort_clean()
1013 list_del_init(&iip->ili_item.li_bio_list); in xfs_iflush_abort_clean()
1020 * attached to a cluster buffer. It occurs when the inode and the backing
1032 struct xfs_inode_log_item *iip = ip->i_itemp; in xfs_iflush_abort()
1044 * pointer for push operations to access - it is only safe to remove the in xfs_iflush_abort()
1048 * as xfs_trans_ail_delete()->xfs_clear_li_failed() will release buffer in xfs_iflush_abort()
1052 clear_bit(XFS_LI_FAILED, &iip->ili_item.li_flags); in xfs_iflush_abort()
1053 xfs_trans_ail_delete(&iip->ili_item, 0); in xfs_iflush_abort()
1059 spin_lock(&iip->ili_lock); in xfs_iflush_abort()
1060 bp = iip->ili_item.li_buf; in xfs_iflush_abort()
1062 spin_unlock(&iip->ili_lock); in xfs_iflush_abort()
1072 * inode cluster buffer locked. If the inode is attached to a cluster buffer,
1079 struct xfs_inode_log_item *iip = ip->i_itemp; in xfs_iflush_shutdown_abort()
1088 spin_lock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1089 bp = iip->ili_item.li_buf; in xfs_iflush_shutdown_abort()
1091 spin_unlock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1103 spin_unlock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1106 spin_lock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1107 if (!iip->ili_item.li_buf) { in xfs_iflush_shutdown_abort()
1113 ASSERT(list_empty(&iip->ili_item.li_bio_list)); in xfs_iflush_shutdown_abort()
1114 ASSERT(!test_bit(XFS_LI_IN_AIL, &iip->ili_item.li_flags)); in xfs_iflush_shutdown_abort()
1116 spin_unlock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1129 ASSERT(iip->ili_item.li_buf == bp); in xfs_iflush_shutdown_abort()
1130 spin_unlock(&iip->ili_lock); in xfs_iflush_shutdown_abort()
1145 struct xfs_inode_log_format_32 *in_f32 = buf->i_addr; in xfs_inode_item_format_convert()
1147 if (buf->i_len != sizeof(*in_f32)) { in xfs_inode_item_format_convert()
1149 return -EFSCORRUPTED; in xfs_inode_item_format_convert()
1152 in_f->ilf_type = in_f32->ilf_type; in xfs_inode_item_format_convert()
1153 in_f->ilf_size = in_f32->ilf_size; in xfs_inode_item_format_convert()
1154 in_f->ilf_fields = in_f32->ilf_fields; in xfs_inode_item_format_convert()
1155 in_f->ilf_asize = in_f32->ilf_asize; in xfs_inode_item_format_convert()
1156 in_f->ilf_dsize = in_f32->ilf_dsize; in xfs_inode_item_format_convert()
1157 in_f->ilf_ino = in_f32->ilf_ino; in xfs_inode_item_format_convert()
1158 memcpy(&in_f->ilf_u, &in_f32->ilf_u, sizeof(in_f->ilf_u)); in xfs_inode_item_format_convert()
1159 in_f->ilf_blkno = in_f32->ilf_blkno; in xfs_inode_item_format_convert()
1160 in_f->ilf_len = in_f32->ilf_len; in xfs_inode_item_format_convert()
1161 in_f->ilf_boffset = in_f32->ilf_boffset; in xfs_inode_item_format_convert()