1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

s3:locking: add mark_share_mode_disconnected()

Pair-Programmed-With: Michael Adam <obnox@samba.org>
This commit is contained in:
Stefan Metzmacher 2012-08-03 16:31:32 +02:00
parent bc296053cb
commit 9a81f8ee17
2 changed files with 40 additions and 0 deletions

View File

@ -811,6 +811,44 @@ bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
return True;
}
bool mark_share_mode_disconnected(struct share_mode_lock *lck,
struct files_struct *fsp)
{
struct share_mode_entry entry, *e;
if (lck->data->num_share_modes != 1) {
return false;
}
if (fsp->op == NULL) {
return false;
}
if (!fsp->op->global->durable) {
return false;
}
/* Don't care about the pid owner being correct here - just a search. */
fill_share_mode_entry(&entry, fsp, (uid_t)-1, 0, NO_OPLOCK);
e = find_share_mode_entry(lck->data, &entry);
if (e == NULL) {
return false;
}
DEBUG(10, ("Marking share mode entry disconnected for durable handle\n"));
server_id_set_disconnected(&e->pid);
/*
* On reopen the caller needs to check that
* the client comes with the correct handle.
*/
e->share_file_id = fsp->op->global->open_persistent_id;
lck->data->modified = true;
return true;
}
void del_deferred_open_entry(struct share_mode_lock *lck, uint64_t mid,
struct server_id pid)
{

View File

@ -175,6 +175,8 @@ void add_deferred_open(struct share_mode_lock *lck, uint64_t mid,
struct timeval request_time,
struct server_id pid, struct file_id id);
bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp);
bool mark_share_mode_disconnected(struct share_mode_lock *lck,
struct files_struct *fsp);
void del_deferred_open_entry(struct share_mode_lock *lck, uint64_t mid,
struct server_id pid);
bool remove_share_oplock(struct share_mode_lock *lck, files_struct *fsp);