/// <summary> /// Adds a fsync to the Submission Queue without it being submitted. /// The actual submission can be deferred to avoid unnecessary memory barriers. /// </summary> /// <param name="fd">File descriptor to synchronize</param> /// <param name="fsyncOptions">Integrity options</param> /// <param name="userData">User data that will be returned with the respective <see cref="Completion"/></param> /// <param name="options">Options for the handling of the prepared Submission Queue Entry</param> /// <exception cref="SubmissionQueueFullException">If no more free space in the Submission Queue is available</exception> public void PrepareFsync(int fd, FsyncOption fsyncOptions = FsyncOption.FileIntegrity, ulong userData = 0, SubmissionOption options = SubmissionOption.None) { if (!TryPrepareFsync(fd, fsyncOptions, userData, options)) { ThrowSubmissionQueueFullException(); } }
public RingResult Fsync(int fd, FsyncOption fsyncOptions = FsyncOption.FileIntegrity, SubmissionOption options = SubmissionOption.None) { RingResult result = CreateRingResult(); if (!_ring.TryPrepareFsync(fd, fsyncOptions, result.Handle, options)) { _pool.Return(result); return(_ringFullException); } return(result); }
/// <summary> /// Prepares this Submission Queue Entry as a fsync. /// </summary> /// <param name="fd">File descriptor to synchronize</param> /// <param name="fsyncOptions">Integrity options</param> /// <param name="userData">User data that will be returned with the respective <see cref="Completion"/></param> /// <param name="options">Options for the handling of the prepared Submission Queue Entry</param> /// <param name="personality">The personality to impersonate for this submission</param> public void PrepareFsync(int fd, FsyncOption fsyncOptions = FsyncOption.FileIntegrity, ulong userData = 0, SubmissionOption options = SubmissionOption.None, ushort personality = 0) { var sqe = _sqe; unchecked { sqe->opcode = IORING_OP_FSYNC; sqe->flags = (byte)options; sqe->fd = fd; sqe->fsync_flags = (uint)fsyncOptions; sqe->user_data = userData; sqe->personality = personality; } }
/// <summary> /// Attempts to add a fsync to the Submission Queue without it being submitted. /// The actual submission can be deferred to avoid unnecessary memory barriers. /// </summary> /// <param name="fd">File descriptor to synchronize</param> /// <param name="fsyncOptions">Integrity options</param> /// <param name="userData">User data that will be returned with the respective <see cref="Completion"/></param> /// <param name="options">Options for the handling of the prepared Submission Queue Entry</param> /// <returns><code>false</code> if the submission queue is full. <code>true</code> otherwise.</returns> /// <exception cref="SubmissionQueueFullException">If no more free space in the Submission Queue is available</exception> public bool TryPrepareFsync(int fd, FsyncOption fsyncOptions = FsyncOption.FileIntegrity, ulong userData = 0, SubmissionOption options = SubmissionOption.None) { if (!NextSubmissionQueueEntry(out var sqe)) { return(false); } sqe->opcode = IORING_OP_FSYNC; sqe->user_data = userData; sqe->flags = (byte)options; sqe->fd = fd; sqe->fsync_flags = (uint)fsyncOptions; return(true); }