Added internal syscalls for fs_read_info() and fs_write_info().
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4494 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -3407,7 +3407,7 @@ fs_read_info(dev_t device, struct fs_info *info)
|
|||||||
mount = find_mount(device);
|
mount = find_mount(device);
|
||||||
if (mount == NULL) {
|
if (mount == NULL) {
|
||||||
status = EINVAL;
|
status = EINVAL;
|
||||||
goto error;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FS_MOUNT_CALL(mount, read_fs_info))
|
if (FS_MOUNT_CALL(mount, read_fs_info))
|
||||||
@@ -3419,7 +3419,7 @@ fs_read_info(dev_t device, struct fs_info *info)
|
|||||||
info->dev = mount->id;
|
info->dev = mount->id;
|
||||||
info->root = mount->root_vnode->id;
|
info->root = mount->root_vnode->id;
|
||||||
|
|
||||||
error:
|
out:
|
||||||
mutex_unlock(&gMountMutex);
|
mutex_unlock(&gMountMutex);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -3436,7 +3436,7 @@ fs_write_info(dev_t device, const struct fs_info *info, int mask)
|
|||||||
mount = find_mount(device);
|
mount = find_mount(device);
|
||||||
if (mount == NULL) {
|
if (mount == NULL) {
|
||||||
status = EINVAL;
|
status = EINVAL;
|
||||||
goto error;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FS_MOUNT_CALL(mount, write_fs_info))
|
if (FS_MOUNT_CALL(mount, write_fs_info))
|
||||||
@@ -3444,7 +3444,7 @@ fs_write_info(dev_t device, const struct fs_info *info, int mask)
|
|||||||
else
|
else
|
||||||
status = EROFS;
|
status = EROFS;
|
||||||
|
|
||||||
error:
|
out:
|
||||||
mutex_unlock(&gMountMutex);
|
mutex_unlock(&gMountMutex);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -3542,6 +3542,26 @@ sys_unmount(const char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
_kern_read_fs_info(dev_t device, struct fs_info *info)
|
||||||
|
{
|
||||||
|
if (info == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
return fs_read_info(device, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
_kern_write_fs_info(dev_t device, const struct fs_info *info, int mask)
|
||||||
|
{
|
||||||
|
if (info == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
return fs_write_info(device, info, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
sys_sync(void)
|
sys_sync(void)
|
||||||
{
|
{
|
||||||
@@ -3906,6 +3926,45 @@ user_unmount(const char *userPath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
_user_read_fs_info(dev_t device, struct fs_info *userInfo)
|
||||||
|
{
|
||||||
|
struct fs_info info;
|
||||||
|
status_t status;
|
||||||
|
|
||||||
|
if (userInfo == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
if (!CHECK_USER_ADDRESS(userInfo))
|
||||||
|
return B_BAD_ADDRESS;
|
||||||
|
|
||||||
|
status = fs_read_info(device, &info);
|
||||||
|
if (status != B_OK)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
if (user_memcpy(userInfo, &info, sizeof(struct fs_info)) < B_OK)
|
||||||
|
return B_BAD_ADDRESS;
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
_user_write_fs_info(dev_t device, const struct fs_info *userInfo, int mask)
|
||||||
|
{
|
||||||
|
struct fs_info info;
|
||||||
|
|
||||||
|
if (userInfo == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
if (!CHECK_USER_ADDRESS(userInfo)
|
||||||
|
|| user_memcpy(&info, userInfo, sizeof(struct fs_info)) < B_OK)
|
||||||
|
return B_BAD_ADDRESS;
|
||||||
|
|
||||||
|
return fs_write_info(device, &info, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
user_sync(void)
|
user_sync(void)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user