Small bugfix: rootfs_read_stat() returned creation time instead of modification
time in st_mtime. rootfs_write_stat() now properly locks the node access. Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8960 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
a837c705f5
commit
e4a0232cc7
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
|
||||||
** Distributed under the terms of the OpenBeOS License.
|
** Distributed under the terms of the Haiku License.
|
||||||
**
|
**
|
||||||
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
||||||
** Distributed under the terms of the NewOS License.
|
** Distributed under the terms of the NewOS License.
|
||||||
@ -311,7 +311,7 @@ rootfs_mount(mount_id id, const char *device, void *args, fs_volume *_fs, vnode_
|
|||||||
fs->next_vnode_id = 0;
|
fs->next_vnode_id = 0;
|
||||||
|
|
||||||
err = mutex_init(&fs->lock, "rootfs_mutex");
|
err = mutex_init(&fs->lock, "rootfs_mutex");
|
||||||
if (err < 0)
|
if (err < B_OK)
|
||||||
goto err1;
|
goto err1;
|
||||||
|
|
||||||
fs->vnode_list_hash = hash_init(ROOTFS_HASH_SIZE, (addr)&vnode->all_next - (addr)vnode,
|
fs->vnode_list_hash = hash_init(ROOTFS_HASH_SIZE, (addr)&vnode->all_next - (addr)vnode,
|
||||||
@ -335,7 +335,7 @@ rootfs_mount(mount_id id, const char *device, void *args, fs_volume *_fs, vnode_
|
|||||||
*root_vnid = vnode->id;
|
*root_vnid = vnode->id;
|
||||||
*_fs = fs;
|
*_fs = fs;
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
|
|
||||||
err3:
|
err3:
|
||||||
hash_uninit(fs->vnode_list_hash);
|
hash_uninit(fs->vnode_list_hash);
|
||||||
@ -371,7 +371,7 @@ rootfs_unmount(fs_volume _fs)
|
|||||||
mutex_destroy(&fs->lock);
|
mutex_destroy(&fs->lock);
|
||||||
free(fs);
|
free(fs);
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -380,7 +380,7 @@ rootfs_sync(fs_volume fs)
|
|||||||
{
|
{
|
||||||
TRACE(("rootfs_sync: entry\n"));
|
TRACE(("rootfs_sync: entry\n"));
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -406,7 +406,7 @@ rootfs_lookup(fs_volume _fs, fs_vnode _dir, const char *name, vnode_id *_id, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
status = get_vnode(fs->id, vnode->id, (fs_vnode *)&vdummy);
|
status = get_vnode(fs->id, vnode->id, (fs_vnode *)&vdummy);
|
||||||
if (status < 0)
|
if (status < B_OK)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
*_id = vnode->id;
|
*_id = vnode->id;
|
||||||
@ -520,7 +520,7 @@ rootfs_close(fs_volume _fs, fs_vnode _v, fs_cookie _cookie)
|
|||||||
|
|
||||||
TRACE(("rootfs_close: entry vnode %p, cookie %p\n", v, cookie));
|
TRACE(("rootfs_close: entry vnode %p, cookie %p\n", v, cookie));
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -533,17 +533,16 @@ rootfs_free_cookie(fs_volume _fs, fs_vnode _v, fs_cookie _cookie)
|
|||||||
|
|
||||||
TRACE(("rootfs_freecookie: entry vnode %p, cookie %p\n", v, cookie));
|
TRACE(("rootfs_freecookie: entry vnode %p, cookie %p\n", v, cookie));
|
||||||
#endif
|
#endif
|
||||||
if (cookie)
|
free(cookie);
|
||||||
free(cookie);
|
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static status_t
|
||||||
rootfs_fsync(fs_volume _fs, fs_vnode _v)
|
rootfs_fsync(fs_volume _fs, fs_vnode _v)
|
||||||
{
|
{
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -599,7 +598,7 @@ rootfs_create_dir(fs_volume _fs, fs_vnode _dir, const char *name, int mode, vnod
|
|||||||
notify_listener(B_ENTRY_CREATED, fs->id, dir->id, 0, vnode->id, name);
|
notify_listener(B_ENTRY_CREATED, fs->id, dir->id, 0, vnode->id, name);
|
||||||
|
|
||||||
mutex_unlock(&fs->lock);
|
mutex_unlock(&fs->lock);
|
||||||
return 0;
|
return B_OK;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
mutex_unlock(&fs->lock);
|
mutex_unlock(&fs->lock);
|
||||||
@ -789,7 +788,7 @@ rootfs_symlink(fs_volume _fs, fs_vnode _dir, const char *name, const char *path,
|
|||||||
struct rootfs *fs = _fs;
|
struct rootfs *fs = _fs;
|
||||||
struct rootfs_vnode *dir = _dir;
|
struct rootfs_vnode *dir = _dir;
|
||||||
struct rootfs_vnode *vnode;
|
struct rootfs_vnode *vnode;
|
||||||
status_t status = 0;
|
status_t status = B_OK;
|
||||||
|
|
||||||
TRACE(("rootfs_symlink: dir %p, name = '%s', path = %s\n", dir, name, path));
|
TRACE(("rootfs_symlink: dir %p, name = '%s', path = %s\n", dir, name, path));
|
||||||
|
|
||||||
@ -822,7 +821,7 @@ rootfs_symlink(fs_volume _fs, fs_vnode _dir, const char *name, const char *path,
|
|||||||
notify_listener(B_ENTRY_CREATED, fs->id, dir->id, 0, vnode->id, name);
|
notify_listener(B_ENTRY_CREATED, fs->id, dir->id, 0, vnode->id, name);
|
||||||
|
|
||||||
mutex_unlock(&fs->lock);
|
mutex_unlock(&fs->lock);
|
||||||
return 0;
|
return B_OK;
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
rootfs_delete_vnode(fs, vnode, false);
|
rootfs_delete_vnode(fs, vnode, false);
|
||||||
@ -907,7 +906,7 @@ rootfs_rename(fs_volume _fs, fs_vnode _olddir, const char *oldname, fs_vnode _ne
|
|||||||
rootfs_insert_in_dir(newdir, v1);
|
rootfs_insert_in_dir(newdir, v1);
|
||||||
}
|
}
|
||||||
|
|
||||||
err = 0;
|
err = B_OK;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
mutex_unlock(&fs->lock);
|
mutex_unlock(&fs->lock);
|
||||||
@ -937,10 +936,10 @@ rootfs_read_stat(fs_volume _fs, fs_vnode _v, struct stat *stat)
|
|||||||
stat->st_gid = vnode->gid;
|
stat->st_gid = vnode->gid;
|
||||||
|
|
||||||
stat->st_atime = time(NULL);
|
stat->st_atime = time(NULL);
|
||||||
stat->st_mtime = stat->st_ctime = vnode->creation_time;
|
stat->st_mtime = stat->st_ctime = vnode->modification_time;
|
||||||
stat->st_crtime = vnode->creation_time;
|
stat->st_crtime = vnode->creation_time;
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -956,6 +955,8 @@ rootfs_write_stat(fs_volume _fs, fs_vnode _vnode, const struct stat *stat, uint3
|
|||||||
if (statMask & FS_WRITE_STAT_SIZE)
|
if (statMask & FS_WRITE_STAT_SIZE)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
mutex_lock(&fs->lock);
|
||||||
|
|
||||||
if (statMask & FS_WRITE_STAT_MODE)
|
if (statMask & FS_WRITE_STAT_MODE)
|
||||||
vnode->stream.type = (vnode->stream.type & ~S_IUMSK) | (stat->st_mode & S_IUMSK);
|
vnode->stream.type = (vnode->stream.type & ~S_IUMSK) | (stat->st_mode & S_IUMSK);
|
||||||
|
|
||||||
@ -969,6 +970,8 @@ rootfs_write_stat(fs_volume _fs, fs_vnode _vnode, const struct stat *stat, uint3
|
|||||||
if (statMask & FS_WRITE_STAT_CRTIME)
|
if (statMask & FS_WRITE_STAT_CRTIME)
|
||||||
vnode->creation_time = stat->st_crtime;
|
vnode->creation_time = stat->st_crtime;
|
||||||
|
|
||||||
|
mutex_unlock(&fs->lock);
|
||||||
|
|
||||||
notify_listener(B_STAT_CHANGED, fs->id, 0, 0, vnode->id, NULL);
|
notify_listener(B_STAT_CHANGED, fs->id, 0, 0, vnode->id, NULL);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user