mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
c9a1f2cd94
commit
f236d00b83
|
@ -78,7 +78,7 @@ end;
|
||||||
}
|
}
|
||||||
function fdesc_cmount(ma,data:Pointer;flags:QWORD):Integer;
|
function fdesc_cmount(ma,data:Pointer;flags:QWORD):Integer;
|
||||||
begin
|
begin
|
||||||
Exit(kernel_mount(ma, flags));
|
Exit(kernel_nmount(ma, flags));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,7 +98,7 @@ function mount_argsu(ma:p_mntarg;name:PChar;val:Pointer;len:Integer):p_mntarg;
|
||||||
function mount_arg(ma:p_mntarg;name:PChar;val:Pointer;len:Integer):p_mntarg;
|
function mount_arg(ma:p_mntarg;name:PChar;val:Pointer;len:Integer):p_mntarg;
|
||||||
procedure free_mntarg(ma:p_mntarg);
|
procedure free_mntarg(ma:p_mntarg);
|
||||||
|
|
||||||
function kernel_mount(ma:p_mntarg;flags:QWORD):Integer;
|
function kernel_nmount(ma:p_mntarg;flags:QWORD):Integer;
|
||||||
function kern_unmount(path:PChar;flags:Integer):Integer;
|
function kern_unmount(path:PChar;flags:Integer):Integer;
|
||||||
|
|
||||||
function sys_nmount(iovp:Pointer;iovcnt:DWORD;flags:QWORD):Integer;
|
function sys_nmount(iovp:Pointer;iovcnt:DWORD;flags:QWORD):Integer;
|
||||||
|
@ -1566,10 +1566,14 @@ begin
|
||||||
// vfs_setpublicfs(nil, nil, nil);
|
// vfs_setpublicfs(nil, nil, nil);
|
||||||
|
|
||||||
vfs_msync(mp, MNT_WAIT);
|
vfs_msync(mp, MNT_WAIT);
|
||||||
|
|
||||||
MNT_ILOCK(mp);
|
MNT_ILOCK(mp);
|
||||||
|
|
||||||
async_flag:=mp^.mnt_flag and MNT_ASYNC;
|
async_flag:=mp^.mnt_flag and MNT_ASYNC;
|
||||||
mp^.mnt_flag:=mp^.mnt_flag and (not MNT_ASYNC);
|
|
||||||
|
mp^.mnt_flag :=mp^.mnt_flag and (not MNT_ASYNC);
|
||||||
mp^.mnt_kern_flag:=mp^.mnt_kern_flag and (not MNTK_ASYNC);
|
mp^.mnt_kern_flag:=mp^.mnt_kern_flag and (not MNTK_ASYNC);
|
||||||
|
|
||||||
MNT_IUNLOCK(mp);
|
MNT_IUNLOCK(mp);
|
||||||
//cache_purgevfs(mp); { remove cache entries for this file sys }
|
//cache_purgevfs(mp); { remove cache entries for this file sys }
|
||||||
//vfs_deallocate_syncvnode(mp);
|
//vfs_deallocate_syncvnode(mp);
|
||||||
|
@ -1796,13 +1800,13 @@ end;
|
||||||
{
|
{
|
||||||
* Mount a filesystem
|
* Mount a filesystem
|
||||||
}
|
}
|
||||||
function kernel_mount(ma:p_mntarg;flags:QWORD):Integer;
|
function kernel_nmount(ma:p_mntarg;flags:QWORD):Integer;
|
||||||
var
|
var
|
||||||
auio:t_uio;
|
auio:t_uio;
|
||||||
error:Integer;
|
error:Integer;
|
||||||
begin
|
begin
|
||||||
Assert(ma<>nil, 'kernel_mount nil ma');
|
Assert(ma<>nil, 'kernel_mount nil ma');
|
||||||
Assert(ma^.v<>nil, 'kernel_mount nil ma^.v');
|
Assert(ma^.v<>nil, 'kernel_mount nil ma^.v');
|
||||||
Assert((ma^.len and 1)=0, 'kernel_mount odd ma^.len (%d)');
|
Assert((ma^.len and 1)=0, 'kernel_mount odd ma^.len (%d)');
|
||||||
|
|
||||||
auio.uio_iov:=ma^.v;
|
auio.uio_iov:=ma^.v;
|
||||||
|
|
|
@ -10,7 +10,9 @@ uses
|
||||||
vmount;
|
vmount;
|
||||||
|
|
||||||
procedure vfs_mountroot();
|
procedure vfs_mountroot();
|
||||||
function vfs_mountroot_simple(fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
function vfs_mount_path (fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
||||||
|
function vfs_mount_mkdir (fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
||||||
|
function vfs_unmount_rmdir(path:PChar;flags:Integer):Integer;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -319,7 +321,7 @@ begin
|
||||||
Exit(0);
|
Exit(0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function vfs_mountroot_simple(fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
function vfs_mount_path(fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
||||||
const
|
const
|
||||||
ERRMSGL=255;
|
ERRMSGL=255;
|
||||||
var
|
var
|
||||||
|
@ -343,7 +345,25 @@ begin
|
||||||
ma:=mount_arg(ma, 'errmsg', PChar(errmsg), ERRMSGL);
|
ma:=mount_arg(ma, 'errmsg', PChar(errmsg), ERRMSGL);
|
||||||
|
|
||||||
ma:=parse_mountroot_options(ma, opts);
|
ma:=parse_mountroot_options(ma, opts);
|
||||||
Result:=kernel_mount(ma,flags);
|
Result:=kernel_nmount(ma,flags);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function vfs_mount_mkdir(fstype,fspath,from,opts:PChar;flags:QWORD):Integer;
|
||||||
|
begin
|
||||||
|
Result:=kern_mkdir(fspath,UIO_SYSSPACE,&777);
|
||||||
|
if (Result=0) then
|
||||||
|
begin
|
||||||
|
Result:=vfs_mount_path(fstype,fspath,from,opts,flags);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function vfs_unmount_rmdir(path:PChar;flags:Integer):Integer;
|
||||||
|
begin
|
||||||
|
Result:=kern_unmount(path,flags);
|
||||||
|
if (Result=0) then
|
||||||
|
begin
|
||||||
|
Result:=kern_rmdir(path,UIO_SYSSPACE);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure vfs_mountroot();
|
procedure vfs_mountroot();
|
||||||
|
@ -360,39 +380,24 @@ begin
|
||||||
|
|
||||||
mount_print;
|
mount_print;
|
||||||
|
|
||||||
error:=vfs_mountroot_simple('ufs','/','/',nil,MNT_ROOTFS);
|
error:=vfs_mount_path('ufs','/','/',nil,MNT_ROOTFS);
|
||||||
if (error<>0) then goto _end;
|
if (error<>0) then goto _end;
|
||||||
|
|
||||||
//error:=vfs_mountroot_simple('devfs','/dev','/dev',nil,MNT_ROOTFS);
|
|
||||||
//if (error<>0) then goto _end;
|
|
||||||
|
|
||||||
mount_print;
|
mount_print;
|
||||||
|
|
||||||
error:=vfs_mountroot_shuffle(mp);
|
error:=vfs_mountroot_shuffle(mp);
|
||||||
|
|
||||||
//error:=vfs_mountroot_simple('ufs','/app0/test','/app0/test',nil,0);
|
{
|
||||||
//if (error<>0) then goto _end;
|
|
||||||
|
|
||||||
error:=kern_mkdir('null',UIO_SYSSPACE,&777);
|
error:=kern_mkdir('null',UIO_SYSSPACE,&777);
|
||||||
if (error=0) then
|
if (error=0) then
|
||||||
begin
|
begin
|
||||||
error:=vfs_mountroot_simple('nullfs','/null','/dev',nil,0);
|
error:=vfs_mountroot_simple('nullfs','/null','/dev',nil,0);
|
||||||
end;
|
end;
|
||||||
|
}
|
||||||
|
|
||||||
error:=kern_mkdir('app0',UIO_SYSSPACE,&777);
|
//error:=vfs_mount_mkdir('ufs','/app0','/',nil,0);
|
||||||
if (error=0) then
|
//error:=vfs_mount_mkdir('ufs','/system','/system',nil,0);
|
||||||
begin
|
//
|
||||||
error:=vfs_mountroot_simple('ufs','/app0','/',nil,0);
|
|
||||||
end;
|
|
||||||
|
|
||||||
error:=kern_mkdir('system',UIO_SYSSPACE,&777);
|
|
||||||
if (error=0) then
|
|
||||||
begin
|
|
||||||
error:=vfs_mountroot_simple('ufs','/system','/system',nil,0);
|
|
||||||
end;
|
|
||||||
|
|
||||||
//error:=kern_unmount('/app0',0);
|
|
||||||
|
|
||||||
mount_print;
|
mount_print;
|
||||||
|
|
||||||
_end:
|
_end:
|
||||||
|
|
|
@ -336,7 +336,7 @@ begin
|
||||||
if (mp^.mnt_stat.f_fsid.val[0]=fsid^.val[0]) and
|
if (mp^.mnt_stat.f_fsid.val[0]=fsid^.val[0]) and
|
||||||
(mp^.mnt_stat.f_fsid.val[1]=fsid^.val[1]) then
|
(mp^.mnt_stat.f_fsid.val[1]=fsid^.val[1]) then
|
||||||
begin
|
begin
|
||||||
MNT_REL(mp);
|
MNT_REF(mp);
|
||||||
mtx_unlock(mountlist_mtx);
|
mtx_unlock(mountlist_mtx);
|
||||||
Exit(mp);
|
Exit(mp);
|
||||||
end;
|
end;
|
||||||
|
@ -849,8 +849,7 @@ var
|
||||||
active:Integer;
|
active:Integer;
|
||||||
begin
|
begin
|
||||||
mp:=vp^.v_mount;
|
mp:=vp^.v_mount;
|
||||||
if (mp=nil) then
|
if (mp=nil) then Exit;
|
||||||
Exit;
|
|
||||||
MNT_ILOCK(mp);
|
MNT_ILOCK(mp);
|
||||||
VI_LOCK(vp);
|
VI_LOCK(vp);
|
||||||
Assert(mp^.mnt_activevnodelistsize <= mp^.mnt_nvnodelistsize,
|
Assert(mp^.mnt_activevnodelistsize <= mp^.mnt_nvnodelistsize,
|
||||||
|
|
|
@ -457,11 +457,13 @@ end;
|
||||||
|
|
||||||
procedure MNT_REF(mp:p_mount); inline;
|
procedure MNT_REF(mp:p_mount); inline;
|
||||||
begin
|
begin
|
||||||
|
Assert(mp^.mnt_ref>=0);
|
||||||
System.InterlockedIncrement(mp^.mnt_ref);
|
System.InterlockedIncrement(mp^.mnt_ref);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure MNT_REL(mp:p_mount); inline;
|
procedure MNT_REL(mp:p_mount); inline;
|
||||||
begin
|
begin
|
||||||
|
Assert(mp^.mnt_ref>0);
|
||||||
if (System.InterlockedDecrement(mp^.mnt_ref)=0) then
|
if (System.InterlockedDecrement(mp^.mnt_ref)=0) then
|
||||||
begin
|
begin
|
||||||
wakeup(mp)
|
wakeup(mp)
|
||||||
|
|
Loading…
Reference in New Issue