1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

pvfs_open: use the delete_path of odb_close_file()

metze
This commit is contained in:
Stefan Metzmacher 2008-02-27 21:52:52 +01:00
parent fc27730bad
commit c78451ce06

View File

@ -50,29 +50,10 @@ struct pvfs_file *pvfs_find_fd(struct pvfs_state *pvfs,
*/
static int pvfs_dir_handle_destructor(struct pvfs_file_handle *h)
{
int open_count;
char *path = NULL;
if (h->name->stream_name == NULL &&
pvfs_delete_on_close_set(h->pvfs, h, &open_count, &path) &&
open_count == 1) {
NTSTATUS status;
status = pvfs_xattr_unlink_hook(h->pvfs, path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n",
path, nt_errstr(status)));
}
if (rmdir(path) != 0) {
DEBUG(0,("pvfs_dir_handle_destructor: failed to rmdir '%s' - %s\n",
path, strerror(errno)));
}
}
talloc_free(path);
if (h->have_opendb_entry) {
struct odb_lock *lck;
NTSTATUS status;
const char *delete_path = NULL;
lck = odb_lock(h, h->pvfs->odb_context, &h->odb_locking_key);
if (lck == NULL) {
@ -80,12 +61,24 @@ static int pvfs_dir_handle_destructor(struct pvfs_file_handle *h)
return 0;
}
status = odb_close_file(lck, h);
status = odb_close_file(lck, h, &delete_path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Unable to remove opendb entry for '%s' - %s\n",
DEBUG(0,("Unable to remove opendb entry for '%s' - %s\n",
h->name->full_name, nt_errstr(status)));
}
if (h->name->stream_name == NULL && delete_path) {
status = pvfs_xattr_unlink_hook(h->pvfs, delete_path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n",
delete_path, nt_errstr(status)));
}
if (rmdir(delete_path) != 0) {
DEBUG(0,("pvfs_dir_handle_destructor: failed to rmdir '%s' - %s\n",
delete_path, strerror(errno)));
}
}
talloc_free(lck);
}
@ -410,9 +403,6 @@ cleanup_delete:
*/
static int pvfs_handle_destructor(struct pvfs_file_handle *h)
{
int open_count;
char *path = NULL;
/* the write time is no longer sticky */
if (h->sticky_write_time) {
NTSTATUS status;
@ -441,32 +431,10 @@ static int pvfs_handle_destructor(struct pvfs_file_handle *h)
h->fd = -1;
}
if (h->name->stream_name == NULL &&
h->open_completed &&
pvfs_delete_on_close_set(h->pvfs, h, &open_count, &path) &&
open_count == 1) {
NTSTATUS status;
status = pvfs_xattr_unlink_hook(h->pvfs, path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n",
path, nt_errstr(status)));
}
if (unlink(path) != 0) {
DEBUG(0,("pvfs_close: failed to delete '%s' - %s\n",
path, strerror(errno)));
} else {
notify_trigger(h->pvfs->notify_context,
NOTIFY_ACTION_REMOVED,
FILE_NOTIFY_CHANGE_FILE_NAME,
path);
}
}
talloc_free(path);
if (h->have_opendb_entry) {
struct odb_lock *lck;
NTSTATUS status;
const char *delete_path = NULL;
lck = odb_lock(h, h->pvfs->odb_context, &h->odb_locking_key);
if (lck == NULL) {
@ -474,12 +442,30 @@ static int pvfs_handle_destructor(struct pvfs_file_handle *h)
return 0;
}
status = odb_close_file(lck, h);
status = odb_close_file(lck, h, &delete_path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Unable to remove opendb entry for '%s' - %s\n",
h->name->full_name, nt_errstr(status)));
}
if (h->name->stream_name == NULL &&
h->open_completed && delete_path) {
status = pvfs_xattr_unlink_hook(h->pvfs, delete_path);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("Warning: xattr unlink hook failed for '%s' - %s\n",
delete_path, nt_errstr(status)));
}
if (unlink(delete_path) != 0) {
DEBUG(0,("pvfs_close: failed to delete '%s' - %s\n",
delete_path, strerror(errno)));
} else {
notify_trigger(h->pvfs->notify_context,
NOTIFY_ACTION_REMOVED,
FILE_NOTIFY_CHANGE_FILE_NAME,
delete_path);
}
}
talloc_free(lck);
}