if (!ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) return0;
dentry = d_find_any_alias(inode); if (!dentry) return0; while (ext4_test_inode_state(inode, EXT4_STATE_NEWENTRY)) {
ext4_clear_inode_state(inode, EXT4_STATE_NEWENTRY);
next = dget_parent(dentry);
dput(dentry);
dentry = next;
inode = dentry->d_inode;
/* *Thedirectoryinodemayhavegonethroughrmdirbynow.But *theinodeitselfanditsblocksarestillallocated(wehold *areferencetotheinodeviaitsdentry),soitdidn'tgo *throughext4_evict_inode())andsowearesafetoflush *metadatablocksandtheinode.
*/
ret = sync_mapping_buffers(inode->i_mapping); if (ret) break;
ret = sync_inode_metadata(inode, 1); if (ret) break;
}
dput(dentry); return ret;
}
staticint ext4_fsync_nojournal(struct file *file, loff_t start, loff_t end, int datasync, bool *needs_barrier)
{ struct inode *inode = file->f_inode; int ret;
ret = generic_buffers_fsync_noflush(file, start, end, datasync); if (!ret)
ret = ext4_sync_parent(inode); if (test_opt(inode->i_sb, BARRIER))
*needs_barrier = true;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.