From 0a1dabca7eb05baaf2f865fbf0012ef9f78060f2 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 22 Jul 2010 11:08:34 +0000 Subject: [PATCH] Added public io_request_is_vip(), returning whether the given request has the VIP flag set. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37678 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/drivers/io_requests.h | 1 + .../file_systems/userlandfs/kernel_add_on/Volume.cpp | 1 + .../file_systems/userlandfs/server/IORequestInfo.h | 10 +++++++--- .../userlandfs/server/UserlandRequestHandler.cpp | 2 +- .../userlandfs/server/haiku/haiku_kernel_emu.cpp | 7 +++++++ src/system/kernel/device_manager/io_requests.cpp | 8 ++++++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/headers/os/drivers/io_requests.h b/headers/os/drivers/io_requests.h index b7eb4f7cd5..d95fef4e72 100644 --- a/headers/os/drivers/io_requests.h +++ b/headers/os/drivers/io_requests.h @@ -20,6 +20,7 @@ extern "C" { #endif bool io_request_is_write(const io_request* request); +bool io_request_is_vip(const io_request* request); off_t io_request_offset(const io_request* request); off_t io_request_length(const io_request* request); status_t read_from_io_request(io_request* request, void* buffer, diff --git a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp index b2d6fa7a79..cc63ccf4d4 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp @@ -1228,6 +1228,7 @@ Volume::DoIO(void* _node, void* cookie, io_request* ioRequest) request->offset = ioRequest->Offset(); request->length = ioRequest->Length(); request->isWrite = ioRequest->IsWrite(); + request->isVIP = (ioRequest->Flags() & B_VIP_IO_REQUEST) != 0; // send the request KernelRequestHandler handler(this, DO_IO_REPLY); diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/IORequestInfo.h b/src/add-ons/kernel/file_systems/userlandfs/server/IORequestInfo.h index ff7024f2ec..3ef66b70c1 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/IORequestInfo.h +++ b/src/add-ons/kernel/file_systems/userlandfs/server/IORequestInfo.h @@ -15,13 +15,16 @@ struct IORequestInfo { size_t length; int32 id; bool isWrite; + bool isVIP; - IORequestInfo(int32 id, bool isWrite, off_t offset, size_t length) + IORequestInfo(int32 id, bool isWrite, off_t offset, size_t length, + bool isVIP) : offset(offset), length(length), id(id), - isWrite(isWrite) + isWrite(isWrite), + isVIP(isVIP) { } @@ -30,7 +33,8 @@ struct IORequestInfo { offset(other.offset), length(other.length), id(other.id), - isWrite(other.isWrite) + isWrite(other.isWrite), + isVIP(other.isVIP) { } }; diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandRequestHandler.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandRequestHandler.cpp index b853aa4207..fb19eb7518 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandRequestHandler.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandRequestHandler.cpp @@ -572,7 +572,7 @@ UserlandRequestHandler::_HandleRequest(DoIORequest* request) if (result == B_OK) { RequestThreadContext context(volume, request); IORequestInfo requestInfo(request->request, request->isWrite, - request->offset, request->length); + request->offset, request->length, request->isVIP); result = volume->DoIO(request->node, request->fileCookie, requestInfo); } diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp index 550415d34f..d9b1a146f9 100644 --- a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp +++ b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/haiku_kernel_emu.cpp @@ -343,6 +343,13 @@ io_request_is_write(const io_request* request) } +bool +io_request_is_vip(const io_request* request) +{ + return ((HaikuKernelIORequest*)request)->isVIP; +} + + off_t io_request_offset(const io_request* request) { diff --git a/src/system/kernel/device_manager/io_requests.cpp b/src/system/kernel/device_manager/io_requests.cpp index e8853dcfc0..7aba27d48b 100644 --- a/src/system/kernel/device_manager/io_requests.cpp +++ b/src/system/kernel/device_manager/io_requests.cpp @@ -52,6 +52,14 @@ io_request_is_write(const io_request* request) } +/*! Returns whether the I/O request has VIP status. */ +bool +io_request_is_vip(const io_request* request) +{ + return (request->Flags() & B_VIP_IO_REQUEST) != 0; +} + + /*! Returns the read/write offset of the given I/O request. This is the immutable offset the request was created with; read_from_io_request() and write_to_io_request() don't change it.