Add extra 'volume' parameter to inodelk/entrylk calls

Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
This commit is contained in:
Vikas Gorur 2009-03-12 16:21:51 +05:30 committed by Anand V. Avati
parent 31c817836c
commit 7af8d8edbd
28 changed files with 278 additions and 150 deletions

View File

@ -1731,7 +1731,7 @@ out:
call_stub_t *
fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
call_stub_t *stub = NULL;
@ -1744,6 +1744,9 @@ fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn,
stub->args.inodelk.fn = fn;
if (volume)
stub->args.inodelk.volume = strdup (volume);
loc_copy (&stub->args.inodelk.loc, loc);
stub->args.inodelk.cmd = cmd;
stub->args.inodelk.lock = *lock;
@ -1774,7 +1777,7 @@ fop_inodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,
call_stub_t *
fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
call_stub_t *stub = NULL;
@ -1789,6 +1792,10 @@ fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn,
if (fd)
stub->args.finodelk.fd = fd_ref (fd);
if (volume)
stub->args.finodelk.volume = strdup (volume);
stub->args.finodelk.cmd = cmd;
stub->args.finodelk.lock = *lock;
@ -1819,7 +1826,7 @@ fop_finodelk_cbk_stub (call_frame_t *frame, fop_inodelk_cbk_t fn,
call_stub_t *
fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,
loc_t *loc, const char *name,
const char *volume, loc_t *loc, const char *name,
entrylk_cmd cmd, entrylk_type type)
{
call_stub_t *stub = NULL;
@ -1832,6 +1839,10 @@ fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,
return NULL;
stub->args.entrylk.fn = fn;
if (volume)
stub->args.entrylk.volume = strdup (volume);
loc_copy (&stub->args.entrylk.loc, loc);
stub->args.entrylk.cmd = cmd;
@ -1865,7 +1876,7 @@ fop_entrylk_cbk_stub (call_frame_t *frame, fop_entrylk_cbk_t fn,
call_stub_t *
fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,
fd_t *fd, const char *name,
const char *volume, fd_t *fd, const char *name,
entrylk_cmd cmd, entrylk_type type)
{
call_stub_t *stub = NULL;
@ -1879,6 +1890,9 @@ fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,
stub->args.fentrylk.fn = fn;
if (volume)
stub->args.fentrylk.volume = strdup (volume);
if (fd)
stub->args.fentrylk.fd = fd_ref (fd);
stub->args.fentrylk.cmd = cmd;
@ -2536,6 +2550,7 @@ call_resume_wind (call_stub_t *stub)
{
stub->args.inodelk.fn (stub->frame,
stub->frame->this,
stub->args.inodelk.volume,
&stub->args.inodelk.loc,
stub->args.inodelk.cmd,
&stub->args.inodelk.lock);
@ -2546,6 +2561,7 @@ call_resume_wind (call_stub_t *stub)
{
stub->args.finodelk.fn (stub->frame,
stub->frame->this,
stub->args.finodelk.volume,
stub->args.finodelk.fd,
stub->args.finodelk.cmd,
&stub->args.finodelk.lock);
@ -2556,6 +2572,7 @@ call_resume_wind (call_stub_t *stub)
{
stub->args.entrylk.fn (stub->frame,
stub->frame->this,
stub->args.entrylk.volume,
&stub->args.entrylk.loc,
stub->args.entrylk.name,
stub->args.entrylk.cmd,
@ -2567,6 +2584,7 @@ call_resume_wind (call_stub_t *stub)
{
stub->args.fentrylk.fn (stub->frame,
stub->frame->this,
stub->args.fentrylk.volume,
stub->args.fentrylk.fd,
stub->args.fentrylk.name,
stub->args.fentrylk.cmd,
@ -3744,17 +3762,26 @@ call_stub_destroy_wind (call_stub_t *stub)
case GF_FOP_INODELK:
{
if (stub->args.inodelk.volume)
FREE (stub->args.inodelk.volume);
loc_wipe (&stub->args.inodelk.loc);
break;
}
case GF_FOP_FINODELK:
{
if (stub->args.finodelk.volume)
FREE (stub->args.finodelk.volume);
if (stub->args.finodelk.fd)
fd_unref (stub->args.finodelk.fd);
break;
}
case GF_FOP_ENTRYLK:
{
if (stub->args.entrylk.volume)
FREE (stub->args.entrylk.volume);
if (stub->args.entrylk.name)
FREE (stub->args.entrylk.name);
loc_wipe (&stub->args.entrylk.loc);
@ -3762,6 +3789,9 @@ call_stub_destroy_wind (call_stub_t *stub)
}
case GF_FOP_FENTRYLK:
{
if (stub->args.fentrylk.volume)
FREE (stub->args.fentrylk.volume);
if (stub->args.fentrylk.name)
FREE (stub->args.fentrylk.name);

View File

@ -487,6 +487,7 @@ typedef struct {
/* inodelk */
struct {
fop_inodelk_t fn;
const char *volume;
loc_t loc;
int32_t cmd;
struct flock lock;
@ -500,6 +501,7 @@ typedef struct {
/* finodelk */
struct {
fop_finodelk_t fn;
const char *volume;
fd_t *fd;
int32_t cmd;
struct flock lock;
@ -514,6 +516,7 @@ typedef struct {
struct {
fop_entrylk_t fn;
loc_t loc;
const char *volume;
const char *name;
entrylk_cmd cmd;
entrylk_type type;
@ -528,6 +531,7 @@ typedef struct {
struct {
fop_fentrylk_t fn;
fd_t *fd;
const char *volume;
const char *name;
entrylk_cmd cmd;
entrylk_type type;
@ -1086,20 +1090,22 @@ fop_lk_cbk_stub (call_frame_t *frame,
call_stub_t *
fop_inodelk_stub (call_frame_t *frame, fop_inodelk_t fn,
loc_t *loc, int32_t cmd, struct flock *lock);
const char *volume, loc_t *loc, int32_t cmd,
struct flock *lock);
call_stub_t *
fop_finodelk_stub (call_frame_t *frame, fop_finodelk_t fn,
fd_t *fd, int32_t cmd, struct flock *lock);
const char *volume, fd_t *fd, int32_t cmd,
struct flock *lock);
call_stub_t *
fop_entrylk_stub (call_frame_t *frame, fop_entrylk_t fn,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type);
call_stub_t *
fop_fentrylk_stub (call_frame_t *frame, fop_fentrylk_t fn,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type);
call_stub_t *

View File

@ -1199,13 +1199,14 @@ default_inodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
default_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd,
struct flock *lock)
{
STACK_WIND (frame,
default_inodelk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->inodelk,
loc, cmd, lock);
volume, loc, cmd, lock);
return 0;
}
@ -1222,13 +1223,13 @@ default_finodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
default_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
STACK_WIND (frame,
default_finodelk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->finodelk,
fd, cmd, lock);
volume, fd, cmd, lock);
return 0;
}
@ -1244,13 +1245,13 @@ default_entrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
default_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
STACK_WIND (frame, default_entrylk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
}
@ -1265,13 +1266,13 @@ default_fentrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
default_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
STACK_WIND (frame, default_fentrylk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
return 0;
}

View File

@ -230,17 +230,19 @@ int32_t default_lk (call_frame_t *frame,
struct flock *flock);
int32_t default_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *flock);
const char *volume, loc_t *loc, int32_t cmd,
struct flock *flock);
int32_t default_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *flock);
const char *volume, fd_t *fd, int32_t cmd,
struct flock *flock);
int32_t default_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type);
int32_t default_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type);
int32_t default_readdir (call_frame_t *frame,

View File

@ -557,6 +557,7 @@ typedef struct {
uint32_t type;
struct gf_flock flock;
char path[0];
char volume[0];
} __attribute__((packed)) gf_fop_inodelk_req_t;
typedef struct {
} __attribute__((packed)) gf_fop_inodelk_rsp_t;
@ -567,6 +568,7 @@ typedef struct {
uint32_t cmd;
uint32_t type;
struct gf_flock flock;
char volume[0];
} __attribute__((packed)) gf_fop_finodelk_req_t;
typedef struct {
} __attribute__((packed)) gf_fop_finodelk_rsp_t;
@ -578,6 +580,7 @@ typedef struct {
uint64_t namelen;
char path[0];
char name[0];
char volume[0];
} __attribute__((packed)) gf_fop_entrylk_req_t;
typedef struct {
} __attribute__((packed)) gf_fop_entrylk_rsp_t;
@ -589,6 +592,7 @@ typedef struct {
uint32_t type;
uint64_t namelen;
char name[0];
char volume[0];
} __attribute__((packed)) gf_fop_fentrylk_req_t;
typedef struct {
} __attribute__((packed)) gf_fop_fentrylk_rsp_t;

View File

@ -626,23 +626,27 @@ typedef int32_t (*fop_lk_t) (call_frame_t *frame,
typedef int32_t (*fop_inodelk_t) (call_frame_t *frame,
xlator_t *this,
const char *volume,
loc_t *loc,
int32_t cmd,
struct flock *flock);
typedef int32_t (*fop_finodelk_t) (call_frame_t *frame,
xlator_t *this,
const char *volume,
fd_t *fd,
int32_t cmd,
struct flock *flock);
typedef int32_t (*fop_entrylk_t) (call_frame_t *frame,
xlator_t *this, loc_t *loc,
xlator_t *this,
const char *volume, loc_t *loc,
const char *basename, entrylk_cmd cmd,
entrylk_type type);
typedef int32_t (*fop_fentrylk_t) (call_frame_t *frame,
xlator_t *this, fd_t *fd,
xlator_t *this,
const char *volume, fd_t *fd,
const char *basename, entrylk_cmd cmd,
entrylk_type type);

View File

@ -504,6 +504,7 @@ sh_missing_entries_finish (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, sh_missing_entries_unlck_cbk,
priv->children[i],
priv->children[i]->fops->entrylk,
this->name,
&sh->parent_loc, local->loc.name,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
@ -1008,6 +1009,7 @@ afr_self_heal_missing_entries (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, sh_missing_entries_lk_cbk,
priv->children[i],
priv->children[i]->fops->entrylk,
this->name,
&sh->parent_loc, local->loc.name,
ENTRYLK_LOCK_NB, ENTRYLK_WRLCK);
if (!--call_count)

View File

@ -231,6 +231,7 @@ afr_sh_data_unlock (call_frame_t *frame, xlator_t *this)
(void *) (long) i,
priv->children[i],
priv->children[i]->fops->inodelk,
this->name,
&local->loc, F_SETLK, &flock);
if (!--call_count)
break;
@ -995,6 +996,7 @@ afr_sh_data_lock (call_frame_t *frame, xlator_t *this)
(void *) (long) i,
priv->children[i],
priv->children[i]->fops->inodelk,
this->name,
&local->loc, F_SETLK, &flock);
if (!--call_count)
break;

View File

@ -146,6 +146,7 @@ afr_sh_entry_unlock (call_frame_t *frame, xlator_t *this)
(void *) (long) i,
priv->children[i],
priv->children[i]->fops->entrylk,
this->name,
&local->loc, NULL,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
if (!--call_count)
@ -2001,6 +2002,7 @@ afr_sh_entry_lock (call_frame_t *frame, xlator_t *this)
(void *) (long) i,
priv->children[i],
priv->children[i]->fops->entrylk,
this->name,
&local->loc, NULL,
ENTRYLK_LOCK_NB, ENTRYLK_WRLCK);
if (!--call_count)

View File

@ -158,6 +158,7 @@ afr_sh_metadata_finish (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, afr_sh_metadata_unlck_cbk,
priv->children[i],
priv->children[i]->fops->inodelk,
this->name,
&local->loc, F_SETLK, &flock);
if (!--call_count)
@ -755,6 +756,7 @@ afr_sh_metadata_lock (call_frame_t *frame, xlator_t *this)
(void *) (long) i,
priv->children[i],
priv->children[i]->fops->inodelk,
this->name,
&local->loc, F_SETLK, &flock);
if (!--call_count)

View File

@ -309,12 +309,14 @@ afr_unlock (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, afr_unlock_common_cbk,
priv->children[i],
priv->children[i]->fops->finodelk,
local->fd, F_SETLK, &flock);
this->name, local->fd,
F_SETLK, &flock);
} else {
STACK_WIND (frame, afr_unlock_common_cbk,
priv->children[i],
priv->children[i]->fops->inodelk,
&local->loc, F_SETLK, &flock);
this->name, &local->loc,
F_SETLK, &flock);
}
break;
@ -324,6 +326,7 @@ afr_unlock (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, afr_unlock_common_cbk,
priv->children[i],
priv->children[i]->fops->entrylk,
this->name,
&local->transaction.new_parent_loc,
local->transaction.new_basename,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
@ -337,14 +340,15 @@ afr_unlock (call_frame_t *frame, xlator_t *this)
STACK_WIND (frame, afr_unlock_common_cbk,
priv->children[i],
priv->children[i]->fops->fentrylk,
local->fd,
this->name, local->fd,
local->transaction.basename,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
} else {
STACK_WIND (frame, afr_unlock_common_cbk,
priv->children[i],
priv->children[i]->fops->entrylk,
&local->transaction.parent_loc,
this->name,
&local->transaction.parent_loc,
local->transaction.basename,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
@ -838,14 +842,16 @@ int afr_lock_rec (call_frame_t *frame, xlator_t *this, int child_index)
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->finodelk,
local->fd, F_SETLKW, &flock);
this->name, local->fd,
F_SETLKW, &flock);
} else {
STACK_WIND_COOKIE (frame, afr_lock_cbk,
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->inodelk,
&local->loc, F_SETLKW, &flock);
this->name, &local->loc,
F_SETLKW, &flock);
}
break;
@ -878,14 +884,14 @@ int afr_lock_rec (call_frame_t *frame, xlator_t *this, int child_index)
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->entrylk,
lower, lower_name,
this->name, lower, lower_name,
ENTRYLK_LOCK, ENTRYLK_WRLCK);
STACK_WIND_COOKIE (frame, afr_lock_cbk,
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->entrylk,
higher, higher_name,
this->name, higher, higher_name,
ENTRYLK_LOCK, ENTRYLK_WRLCK);
break;
@ -897,7 +903,7 @@ int afr_lock_rec (call_frame_t *frame, xlator_t *this, int child_index)
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->fentrylk,
local->fd,
this->name, local->fd,
local->transaction.basename,
ENTRYLK_LOCK, ENTRYLK_WRLCK);
} else {
@ -905,7 +911,8 @@ int afr_lock_rec (call_frame_t *frame, xlator_t *this, int child_index)
(void *) (long) child_index,
priv->children[child_index],
priv->children[child_index]->fops->entrylk,
&local->transaction.parent_loc,
this->name,
&local->transaction.parent_loc,
local->transaction.basename,
ENTRYLK_LOCK, ENTRYLK_WRLCK);
}

View File

@ -1173,8 +1173,8 @@ afr_inodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
afr_inodelk (call_frame_t *frame, xlator_t *this, loc_t *loc,
int32_t cmd, struct flock *flock)
afr_inodelk (call_frame_t *frame, xlator_t *this,
const char *volume, loc_t *loc, int32_t cmd, struct flock *flock)
{
afr_private_t *priv = NULL;
afr_local_t *local = NULL;
@ -1208,7 +1208,7 @@ afr_inodelk (call_frame_t *frame, xlator_t *this, loc_t *loc,
STACK_WIND (frame, afr_inodelk_cbk,
priv->children[i],
priv->children[i]->fops->inodelk,
loc, cmd, flock);
volume, loc, cmd, flock);
if (!--call_count)
break;
@ -1254,8 +1254,8 @@ afr_finodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
afr_finodelk (call_frame_t *frame, xlator_t *this, fd_t *fd,
int32_t cmd, struct flock *flock)
afr_finodelk (call_frame_t *frame, xlator_t *this,
const char *volume, fd_t *fd, int32_t cmd, struct flock *flock)
{
afr_private_t *priv = NULL;
afr_local_t *local = NULL;
@ -1289,7 +1289,7 @@ afr_finodelk (call_frame_t *frame, xlator_t *this, fd_t *fd,
STACK_WIND (frame, afr_finodelk_cbk,
priv->children[i],
priv->children[i]->fops->finodelk,
fd, cmd, flock);
volume, fd, cmd, flock);
if (!--call_count)
break;
@ -1335,7 +1335,8 @@ afr_entrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
afr_entrylk (call_frame_t *frame, xlator_t *this, loc_t *loc,
afr_entrylk (call_frame_t *frame, xlator_t *this,
const char *volume, loc_t *loc,
const char *basename, entrylk_cmd cmd, entrylk_type type)
{
afr_private_t *priv = NULL;
@ -1370,7 +1371,7 @@ afr_entrylk (call_frame_t *frame, xlator_t *this, loc_t *loc,
STACK_WIND (frame, afr_entrylk_cbk,
priv->children[i],
priv->children[i]->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
if (!--call_count)
break;
@ -1417,7 +1418,8 @@ afr_fentrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
afr_fentrylk (call_frame_t *frame, xlator_t *this, fd_t *fd,
afr_fentrylk (call_frame_t *frame, xlator_t *this,
const char *volume, fd_t *fd,
const char *basename, entrylk_cmd cmd, entrylk_type type)
{
afr_private_t *priv = NULL;
@ -1452,7 +1454,7 @@ afr_fentrylk (call_frame_t *frame, xlator_t *this, fd_t *fd,
STACK_WIND (frame, afr_fentrylk_cbk,
priv->children[i],
priv->children[i]->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
if (!--call_count)
break;

View File

@ -3163,7 +3163,7 @@ dht_inodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
dht_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
xlator_t *subvol = NULL;
int op_errno = -1;
@ -3198,7 +3198,7 @@ dht_inodelk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame,
dht_inodelk_cbk,
subvol, subvol->fops->inodelk,
loc, cmd, lock);
volume, loc, cmd, lock);
return 0;
@ -3222,7 +3222,7 @@ dht_finodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
dht_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
xlator_t *subvol = NULL;
int op_errno = -1;
@ -3243,7 +3243,7 @@ dht_finodelk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame,
dht_finodelk_cbk,
subvol, subvol->fops->finodelk,
fd, cmd, lock);
this->name, fd, cmd, lock);
return 0;
@ -3266,7 +3266,7 @@ dht_entrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
dht_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
xlator_t *subvol = NULL;
@ -3300,7 +3300,7 @@ dht_entrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, dht_entrylk_cbk,
subvol, subvol->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
@ -3322,7 +3322,7 @@ dht_fentrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
dht_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
xlator_t *subvol = NULL;
@ -3342,7 +3342,7 @@ dht_fentrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, dht_fentrylk_cbk,
subvol, subvol->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
return 0;

View File

@ -2933,6 +2933,7 @@ ha_inode_entry_lk_cbk (call_frame_t *frame,
int32_t
ha_inodelk (call_frame_t *frame,
xlator_t *this,
const char *volume,
loc_t *loc,
int32_t cmd,
struct flock *lock)
@ -2946,13 +2947,15 @@ ha_inodelk (call_frame_t *frame,
goto err;
}
local = frame->local;
local->stub = fop_inodelk_stub (frame, ha_inodelk, loc, cmd, lock);
local->stub = fop_inodelk_stub (frame, ha_inodelk, volume,
loc, cmd, lock);
STACK_WIND_COOKIE (frame,
ha_inode_entry_lk_cbk,
(void *)(long)local->active,
HA_ACTIVE_CHILD(this, local),
HA_ACTIVE_CHILD(this, local)->fops->inodelk,
loc,
volume,
loc,
cmd,
lock);
return 0;
@ -2964,6 +2967,7 @@ err:
int32_t
ha_entrylk (call_frame_t *frame,
xlator_t *this,
const char *volume,
loc_t *loc,
const char *basename,
entrylk_cmd cmd,
@ -2978,13 +2982,14 @@ ha_entrylk (call_frame_t *frame,
goto err;
}
local = frame->local;
local->stub = fop_entrylk_stub (frame, ha_entrylk, loc, basename, cmd, type);
local->stub = fop_entrylk_stub (frame, ha_entrylk, volume,
loc, basename, cmd, type);
STACK_WIND_COOKIE (frame,
ha_inode_entry_lk_cbk,
(void *)(long)local->active,
HA_ACTIVE_CHILD(this, local),
HA_ACTIVE_CHILD(this, local)->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
err:
STACK_UNWIND (frame, -1, op_errno);

View File

@ -1053,7 +1053,7 @@ map_lk (call_frame_t *frame,
int32_t
map_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
int32_t op_errno = 1;
xlator_t *subvol = NULL;
@ -1074,7 +1074,7 @@ map_inodelk (call_frame_t *frame, xlator_t *this,
default_inodelk_cbk,
subvol,
subvol->fops->inodelk,
loc, cmd, lock);
volume, loc, cmd, lock);
return 0;
err:
STACK_UNWIND (frame, -1, op_errno, NULL, NULL);
@ -1085,7 +1085,7 @@ map_inodelk (call_frame_t *frame, xlator_t *this,
int32_t
map_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
int32_t op_errno = 1;
xlator_t *subvol = NULL;
@ -1105,7 +1105,7 @@ map_finodelk (call_frame_t *frame, xlator_t *this,
default_finodelk_cbk,
subvol,
subvol->fops->finodelk,
fd, cmd, lock);
volume, fd, cmd, lock);
return 0;
err:
STACK_UNWIND (frame, -1, op_errno, NULL, NULL);
@ -1115,7 +1115,7 @@ map_finodelk (call_frame_t *frame, xlator_t *this,
int32_t
map_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int32_t op_errno = 1;
@ -1136,7 +1136,7 @@ map_entrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, default_entrylk_cbk,
subvol,
subvol->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
err:
STACK_UNWIND (frame, -1, op_errno, NULL, NULL);
@ -1146,7 +1146,7 @@ map_entrylk (call_frame_t *frame, xlator_t *this,
int32_t
map_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int32_t op_errno = 1;
@ -1166,7 +1166,7 @@ map_fentrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, default_fentrylk_cbk,
subvol,
subvol->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
return 0;
err:
STACK_UNWIND (frame, -1, op_errno, NULL, NULL);

View File

@ -3894,7 +3894,7 @@ unify_finodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
*/
int
unify_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int cmd, struct flock *flock)
const char *volume, fd_t *fd, int cmd, struct flock *flock)
{
UNIFY_CHECK_FD_CTX_AND_UNWIND_ON_ERR (fd);
xlator_t *child = NULL;
@ -3905,7 +3905,7 @@ unify_finodelk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, unify_finodelk_cbk,
child, child->fops->finodelk,
fd, cmd, flock);
volume, fd, cmd, flock);
return 0;
}
@ -3928,7 +3928,7 @@ unify_fentrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
*/
int
unify_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
@ -3941,7 +3941,7 @@ unify_fentrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, unify_fentrylk_cbk,
child, child->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
return 0;
}
@ -3998,7 +3998,7 @@ unify_inodelk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
*/
int
unify_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int cmd, struct flock *flock)
const char *volume, loc_t *loc, int cmd, struct flock *flock)
{
xlator_t *child = NULL;
@ -4006,7 +4006,7 @@ unify_inodelk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, unify_inodelk_cbk,
child, child->fops->inodelk,
loc, cmd, flock);
volume, loc, cmd, flock);
return 0;
}
@ -4029,7 +4029,7 @@ unify_entrylk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
*/
int
unify_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
@ -4039,7 +4039,7 @@ unify_entrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, unify_entrylk_cbk,
child, child->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
}

View File

@ -1414,7 +1414,8 @@ error_gen_inodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
error_gen_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd,
struct flock *lock)
{
int op_errno = 0;
op_errno = error_gen(this);
@ -1428,7 +1429,7 @@ error_gen_inodelk (call_frame_t *frame, xlator_t *this,
error_gen_inodelk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->inodelk,
loc, cmd, lock);
volume, loc, cmd, lock);
return 0;
}
@ -1445,7 +1446,8 @@ error_gen_finodelk_cbk (call_frame_t *frame, void *cookie,
int32_t
error_gen_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd,
struct flock *lock)
{
int op_errno = 0;
op_errno = error_gen(this);
@ -1459,7 +1461,7 @@ error_gen_finodelk (call_frame_t *frame, xlator_t *this,
error_gen_finodelk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->finodelk,
fd, cmd, lock);
volume, fd, cmd, lock);
return 0;
}
@ -1475,7 +1477,7 @@ error_gen_entrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
error_gen_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int op_errno = 0;
@ -1489,7 +1491,7 @@ error_gen_entrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, error_gen_entrylk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
}
@ -1504,7 +1506,7 @@ error_gen_fentrylk_cbk (call_frame_t *frame, void *cookie,
int32_t
error_gen_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int op_errno = 0;
@ -1518,7 +1520,7 @@ error_gen_fentrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, error_gen_fentrylk_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->fentrylk,
fd, basename, cmd, type);
volume, fd, basename, cmd, type);
return 0;
}

View File

@ -1094,15 +1094,15 @@ trace_inodelk_cbk (call_frame_t *frame,
int32_t
trace_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
ERR_EINVAL_NORETURN (!this || !loc || !basename);
if (trace_fop_names[GF_FOP_ENTRYLK].enabled) {
gf_log (this->name, GF_LOG_NORMAL,
"%"PRId64": (loc= {path=%s, ino=%"PRIu64"} basename=%s, cmd=%s, type=%s)",
frame->root->unique, loc->path, loc->inode->ino, basename,
"%"PRId64": volume=%s, (loc= {path=%s, ino=%"PRIu64"} basename=%s, cmd=%s, type=%s)",
frame->root->unique, volume, loc->path, loc->inode->ino, basename,
((cmd == ENTRYLK_LOCK) ? "ENTRYLK_LOCK" : "ENTRYLK_UNLOCK"),
((type == ENTRYLK_RDLCK) ? "ENTRYLK_RDLCK" : "ENTRYLK_WRLCK"));
}
@ -1111,21 +1111,21 @@ trace_entrylk (call_frame_t *frame, xlator_t *this,
trace_entrylk_cbk,
FIRST_CHILD (this),
FIRST_CHILD (this)->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
return 0;
}
int32_t
trace_inodelk (call_frame_t *frame,
xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *flock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *flock)
{
ERR_EINVAL_NORETURN (!this || !loc);
if (trace_fop_names[GF_FOP_INODELK].enabled) {
gf_log (this->name, GF_LOG_NORMAL,
"%"PRId64": (loc {path=%s, ino=%"PRIu64"}, cmd=%s)",
frame->root->unique, loc->path, loc->inode->ino,
"%"PRId64": volume=%s, (loc {path=%s, ino=%"PRIu64"}, cmd=%s)",
frame->root->unique, volume, loc->path, loc->inode->ino,
((cmd == F_SETLK)? "F_SETLK" : "unknown"));
}
@ -1133,7 +1133,7 @@ trace_inodelk (call_frame_t *frame,
trace_inodelk_cbk,
FIRST_CHILD (this),
FIRST_CHILD (this)->fops->inodelk,
loc, cmd, flock);
volume, loc, cmd, flock);
return 0;
}
@ -1160,14 +1160,14 @@ trace_finodelk_cbk (call_frame_t *frame,
int32_t
trace_finodelk (call_frame_t *frame,
xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *flock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *flock)
{
ERR_EINVAL_NORETURN (!this || !fd);
if (trace_fop_names[GF_FOP_FINODELK].enabled) {
gf_log (this->name, GF_LOG_NORMAL,
"%"PRId64": (fd=%p, cmd=%s)",
frame->root->unique, fd,
"%"PRId64": volume=%s, (fd=%p, cmd=%s)",
frame->root->unique, volume, fd,
((cmd == F_SETLK) ? "F_SETLK" : "unknown"));
}
@ -1175,7 +1175,7 @@ trace_finodelk (call_frame_t *frame,
trace_finodelk_cbk,
FIRST_CHILD (this),
FIRST_CHILD (this)->fops->finodelk,
fd, cmd, flock);
volume, fd, cmd, flock);
return 0;
}

View File

@ -62,7 +62,7 @@ delete_locks_of_transport (pl_inode_t *pinode, transport_t *trans)
int
pl_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *flock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *flock)
{
int32_t op_ret = -1;
int32_t op_errno = 0;
@ -162,7 +162,7 @@ out:
int
pl_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *flock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *flock)
{
int32_t op_ret = -1;
int32_t op_errno = 0;
@ -649,7 +649,7 @@ unlock:
int
pl_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int32_t op_ret = -1;
@ -759,7 +759,7 @@ out:
int
pl_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
int32_t op_ret = -1;

View File

@ -785,20 +785,20 @@ fini (xlator_t *this)
int
pl_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *flock);
const char *volume, loc_t *loc, int32_t cmd, struct flock *flock);
int
pl_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *flock);
const char *volume, fd_t *fd, int32_t cmd, struct flock *flock);
int
pl_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type);
int
pl_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename,
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type);
struct xlator_fops fops = {

View File

@ -1021,7 +1021,7 @@ path_checksum (call_frame_t *frame,
int32_t
path_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename,
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
char *loc_path = (char *)loc->path;
@ -1036,7 +1036,7 @@ path_entrylk (call_frame_t *frame, xlator_t *this,
STACK_WIND (frame, path_common_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->entrylk,
loc, basename, cmd, type);
volume, loc, basename, cmd, type);
loc->path = loc_path;
if (tmp_path != loc_path)
@ -1047,7 +1047,7 @@ path_entrylk (call_frame_t *frame, xlator_t *this,
int32_t
path_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
char *loc_path = (char *)loc->path;
char *tmp_path = NULL;
@ -1062,7 +1062,7 @@ path_inodelk (call_frame_t *frame, xlator_t *this,
path_common_cbk,
FIRST_CHILD(this),
FIRST_CHILD(this)->fops->inodelk,
loc, cmd, lock);
volume, loc, cmd, lock);
loc->path = loc_path;
if (tmp_path != loc_path)

View File

@ -3253,6 +3253,7 @@ unwind:
int32_t
client_inodelk (call_frame_t *frame,
xlator_t *this,
const char *volume,
loc_t *loc,
int32_t cmd,
struct flock *flock)
@ -3265,6 +3266,7 @@ client_inodelk (call_frame_t *frame,
int32_t gf_type = 0;
ino_t ino = 0;
size_t pathlen = 0;
size_t vollen = 0;
client_conf_t *conf = this->private;
if (conf->child) {
@ -3273,12 +3275,14 @@ client_inodelk (call_frame_t *frame,
default_inodelk_cbk,
conf->child,
conf->child->fops->inodelk,
loc, cmd, flock);
volume, loc, cmd, flock);
return 0;
}
pathlen = STRLEN_0(loc->path);
vollen = STRLEN_0(volume);
ino = this_ino_get (loc, this, GF_CLIENT_INODE_SELF);
if (cmd == F_GETLK || cmd == F_GETLK64)
@ -3305,13 +3309,14 @@ client_inodelk (call_frame_t *frame,
break;
}
hdrlen = gf_hdr_len (req, pathlen);
hdr = gf_hdr_new (req, pathlen);
hdrlen = gf_hdr_len (req, pathlen + vollen);
hdr = gf_hdr_new (req, pathlen + vollen);
GF_VALIDATE_OR_GOTO(this->name, hdr, unwind);
req = gf_param (hdr);
strcpy (req->path, loc->path);
strcpy (req->path + pathlen, volume);
req->ino = hton64 (ino);
@ -3349,6 +3354,7 @@ unwind:
int32_t
client_finodelk (call_frame_t *frame,
xlator_t *this,
const char *volume,
fd_t *fd,
int32_t cmd,
struct flock *flock)
@ -3357,6 +3363,7 @@ client_finodelk (call_frame_t *frame,
gf_hdr_common_t *hdr = NULL;
gf_fop_finodelk_req_t *req = NULL;
size_t hdrlen = 0;
size_t vollen = 0;
int32_t gf_cmd = 0;
int32_t gf_type = 0;
int64_t remote_fd = -1;
@ -3368,11 +3375,13 @@ client_finodelk (call_frame_t *frame,
default_finodelk_cbk,
conf->child,
conf->child->fops->finodelk,
fd, cmd, flock);
volume, fd, cmd, flock);
return 0;
}
vollen = STRLEN_0(volume);
ret = this_fd_get (fd, this, &remote_fd);
if (ret == -1) {
gf_log (this->name, GF_LOG_DEBUG,
@ -3406,12 +3415,14 @@ client_finodelk (call_frame_t *frame,
break;
}
hdrlen = gf_hdr_len (req, 0);
hdr = gf_hdr_new (req, 0);
hdrlen = gf_hdr_len (req, vollen);
hdr = gf_hdr_new (req, vollen);
GF_VALIDATE_OR_GOTO(this->name, hdr, unwind);
req = gf_param (hdr);
strcpy (req->volume, volume);
req->fd = hton64 (remote_fd);
req->cmd = hton32 (gf_cmd);
@ -3436,6 +3447,7 @@ unwind:
int32_t
client_entrylk (call_frame_t *frame,
xlator_t *this,
const char *volume,
loc_t *loc,
const char *name,
entrylk_cmd cmd,
@ -3444,6 +3456,7 @@ client_entrylk (call_frame_t *frame,
gf_hdr_common_t *hdr = NULL;
gf_fop_entrylk_req_t *req = NULL;
size_t pathlen = 0;
size_t vollen = 0;
size_t hdrlen = -1;
int ret = -1;
ino_t ino = 0;
@ -3455,19 +3468,21 @@ client_entrylk (call_frame_t *frame,
STACK_WIND (frame, default_entrylk_cbk,
conf->child,
conf->child->fops->entrylk,
loc, name, cmd, type);
volume, loc, name, cmd, type);
return 0;
}
pathlen = STRLEN_0(loc->path);
vollen = STRLEN_0(volume);
if (name)
namelen = STRLEN_0(name);
ino = this_ino_get (loc, this, GF_CLIENT_INODE_SELF);
hdrlen = gf_hdr_len (req, pathlen + namelen);
hdr = gf_hdr_new (req, pathlen + namelen);
hdrlen = gf_hdr_len (req, pathlen + vollen + namelen);
hdr = gf_hdr_new (req, pathlen + vollen + namelen);
GF_VALIDATE_OR_GOTO(this->name, hdr, unwind);
req = gf_param (hdr);
@ -3478,6 +3493,7 @@ client_entrylk (call_frame_t *frame,
strcpy (req->path, loc->path);
if (name)
strcpy (req->name + pathlen, name);
strcpy (req->volume + pathlen + namelen, volume);
req->cmd = hton32 (cmd);
req->type = hton32 (type);
@ -3501,6 +3517,7 @@ unwind:
int32_t
client_fentrylk (call_frame_t *frame,
xlator_t *this,
const char *volume,
fd_t *fd,
const char *name,
entrylk_cmd cmd,
@ -3509,6 +3526,7 @@ client_fentrylk (call_frame_t *frame,
gf_hdr_common_t *hdr = NULL;
gf_fop_fentrylk_req_t *req = NULL;
int64_t remote_fd = -1;
size_t vollen = 0;
size_t namelen = 0;
size_t hdrlen = -1;
int ret = -1;
@ -3519,7 +3537,7 @@ client_fentrylk (call_frame_t *frame,
STACK_WIND (frame, default_fentrylk_cbk,
conf->child,
conf->child->fops->fentrylk,
fd, name, cmd, type);
volume, fd, name, cmd, type);
return 0;
}
@ -3527,6 +3545,8 @@ client_fentrylk (call_frame_t *frame,
if (name)
namelen = STRLEN_0(name);
vollen = STRLEN_0(volume);
ret = this_fd_get (fd, this, &remote_fd);
if (ret == -1) {
gf_log (this->name, GF_LOG_DEBUG,
@ -3536,8 +3556,8 @@ client_fentrylk (call_frame_t *frame,
return 0;
}
hdrlen = gf_hdr_len (req, namelen);
hdr = gf_hdr_new (req, namelen);
hdrlen = gf_hdr_len (req, namelen + vollen);
hdr = gf_hdr_new (req, namelen + vollen);
GF_VALIDATE_OR_GOTO(this->name, hdr, unwind);
req = gf_param (hdr);
@ -3548,6 +3568,8 @@ client_fentrylk (call_frame_t *frame,
if (name)
strcpy (req->name, name);
strcpy (req->volume + namelen, volume);
req->cmd = hton32 (cmd);
req->type = hton32 (type);

View File

@ -223,6 +223,7 @@ server_copy_frame (call_frame_t *frame)
int32_t
gf_add_locker (struct _lock_table *table,
const char *volume,
loc_t *loc,
fd_t *fd,
pid_t pid)
@ -239,6 +240,8 @@ gf_add_locker (struct _lock_table *table,
}
INIT_LIST_HEAD (&new->lockers);
new->volume = strdup (volume);
if (fd == NULL) {
loc_copy (&new->loc, loc);
dir = S_ISDIR (new->loc.inode->st_mode);
@ -263,6 +266,7 @@ out:
int32_t
gf_del_locker (struct _lock_table *table,
const char *volume,
loc_t *loc,
fd_t *fd,
pid_t pid)
@ -292,12 +296,14 @@ gf_del_locker (struct _lock_table *table,
list_for_each_entry_safe (locker, tmp, head, lockers) {
if (locker->fd &&
fd &&
(locker->fd == fd) && (locker->pid == pid)) {
(locker->fd == fd) && (locker->pid == pid)
&& !strcmp (locker->volume, volume)) {
list_move_tail (&locker->lockers, &del);
} else if (locker->loc.inode &&
loc &&
(locker->loc.inode == loc->inode) &&
(locker->pid == pid)) {
(locker->pid == pid)
&& !strcmp (locker->volume, volume)) {
list_move_tail (&locker->lockers, &del);
}
}
@ -314,6 +320,7 @@ gf_del_locker (struct _lock_table *table,
else
loc_wipe (&locker->loc);
free (locker->volume);
free (locker);
}
@ -453,16 +460,20 @@ server_connection_destroy (xlator_t *this, server_connection_t *conn)
STACK_WIND (tmp_frame, server_nop_cbk,
bound_xl,
bound_xl->fops->finodelk,
locker->volume,
locker->fd, F_SETLK, &flock);
fd_unref (locker->fd);
} else {
STACK_WIND (tmp_frame, server_nop_cbk,
bound_xl,
bound_xl->fops->inodelk,
locker->volume,
&(locker->loc), F_SETLK, &flock);
loc_wipe (&locker->loc);
}
free (locker->volume);
list_del_init (&locker->lockers);
free (locker);
}
@ -479,6 +490,7 @@ server_connection_destroy (xlator_t *this, server_connection_t *conn)
STACK_WIND (tmp_frame, server_nop_cbk,
bound_xl,
bound_xl->fops->fentrylk,
locker->volume,
locker->fd, NULL,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
fd_unref (locker->fd);
@ -486,11 +498,14 @@ server_connection_destroy (xlator_t *this, server_connection_t *conn)
STACK_WIND (tmp_frame, server_nop_cbk,
bound_xl,
bound_xl->fops->entrylk,
locker->volume,
&(locker->loc), NULL,
ENTRYLK_UNLOCK, ENTRYLK_WRLCK);
loc_wipe (&locker->loc);
}
free (locker->volume);
list_del_init (&locker->lockers);
free (locker);
}

View File

@ -60,13 +60,13 @@ void free_state (server_state_t *state);
void server_loc_wipe (loc_t *loc);
int32_t
gf_add_locker (struct _lock_table *table,
gf_add_locker (struct _lock_table *table, const char *volume,
loc_t *loc,
fd_t *fd,
pid_t pid);
int32_t
gf_del_locker (struct _lock_table *table,
gf_del_locker (struct _lock_table *table, const char *volume,
loc_t *loc,
fd_t *fd,
pid_t pid);

View File

@ -362,10 +362,10 @@ server_inodelk_cbk (call_frame_t *frame, void *cookie,
if (op_ret >= 0) {
if (state->flock.l_type == F_UNLCK)
gf_del_locker (conn->ltable,
gf_del_locker (conn->ltable, state->volume,
&state->loc, NULL, frame->root->pid);
else
gf_add_locker (conn->ltable,
gf_add_locker (conn->ltable, state->volume,
&state->loc, NULL, frame->root->pid);
} else if (op_errno != ENOSYS) {
gf_log (this->name, GF_LOG_DEBUG,
@ -409,11 +409,13 @@ server_finodelk_cbk (call_frame_t *frame, void *cookie,
if (op_ret >= 0) {
if (state->flock.l_type == F_UNLCK)
gf_del_locker (conn->ltable,
NULL, state->fd, frame->root->pid);
gf_del_locker (conn->ltable, state->volume,
NULL, state->fd,
frame->root->pid);
else
gf_add_locker (conn->ltable,
NULL, state->fd, frame->root->pid);
gf_add_locker (conn->ltable, state->volume,
NULL, state->fd,
frame->root->pid);
} else if (op_errno != ENOSYS) {
gf_log (this->name, GF_LOG_DEBUG,
"%"PRId64": FINODELK %"PRId64" (%"PRId64") ==> %"PRId32" (%s)",
@ -465,10 +467,10 @@ server_entrylk_cbk (call_frame_t *frame, void *cookie,
if (op_ret >= 0) {
if (state->cmd == ENTRYLK_UNLOCK)
gf_del_locker (conn->ltable,
gf_del_locker (conn->ltable, state->volume,
&state->loc, NULL, frame->root->pid);
else
gf_add_locker (conn->ltable,
gf_add_locker (conn->ltable, state->volume,
&state->loc, NULL, frame->root->pid);
} else if (op_errno != ENOSYS) {
gf_log (this->name, GF_LOG_DEBUG,
@ -511,10 +513,10 @@ server_fentrylk_cbk (call_frame_t *frame, void *cookie,
if (op_ret >= 0) {
state = CALL_STATE(frame);
if (state->cmd == ENTRYLK_UNLOCK)
gf_del_locker (conn->ltable,
gf_del_locker (conn->ltable, state->volume,
NULL, state->fd, frame->root->pid);
else
gf_add_locker (conn->ltable,
gf_add_locker (conn->ltable, state->volume,
NULL, state->fd, frame->root->pid);
} else if (op_errno != ENOSYS) {
gf_log (this->name, GF_LOG_DEBUG,
@ -6024,7 +6026,7 @@ server_utimens (call_frame_t *frame,
int32_t
server_inodelk_resume (call_frame_t *frame,
xlator_t *this,
loc_t *loc, int32_t cmd,
const char *volume, loc_t *loc, int32_t cmd,
struct flock *flock)
{
server_state_t *state = NULL;
@ -6046,7 +6048,7 @@ server_inodelk_resume (call_frame_t *frame,
server_inodelk_cbk,
BOUND_XL(frame),
BOUND_XL(frame)->fops->inodelk,
loc, cmd, flock);
volume, loc, cmd, flock);
return 0;
}
@ -6062,6 +6064,7 @@ server_inodelk (call_frame_t *frame,
gf_fop_inodelk_req_t *req = NULL;
server_state_t *state = NULL;
size_t pathlen = 0;
size_t vollen = 0;
req = gf_param (hdr);
state = CALL_STATE(frame);
@ -6082,8 +6085,10 @@ server_inodelk (call_frame_t *frame,
state->type = ntoh32 (req->type);
pathlen = STRLEN_0(req->path);
vollen = STRLEN_0(req->volume + vollen);
state->path = req->path;
state->volume = req->volume + vollen;
state->ino = ntoh64 (req->ino);
gf_flock_to_flock (&req->flock, &state->flock);
@ -6107,7 +6112,8 @@ server_inodelk (call_frame_t *frame,
inodelk_stub = fop_inodelk_stub (frame,
server_inodelk_resume,
&state->loc, state->cmd, &state->flock);
state->volume, &state->loc,
state->cmd, &state->flock);
if ((state->loc.parent == NULL) ||
(state->loc.inode == NULL)) {
@ -6135,6 +6141,8 @@ server_finodelk (call_frame_t *frame,
req = gf_param (hdr);
state = CALL_STATE(frame);
{
state->volume = req->volume;
state->fd_no = ntoh64 (req->fd);
if (state->fd_no >= 0)
state->fd = gf_fd_fdptr_get (conn->fdtable,
@ -6188,7 +6196,7 @@ server_finodelk (call_frame_t *frame,
STACK_WIND (frame, server_finodelk_cbk,
BOUND_XL(frame),
BOUND_XL(frame)->fops->finodelk,
state->fd, state->cmd, &state->flock);
state->volume, state->fd, state->cmd, &state->flock);
return 0;
}
@ -6196,7 +6204,7 @@ server_finodelk (call_frame_t *frame,
int32_t
server_entrylk_resume (call_frame_t *frame,
xlator_t *this,
loc_t *loc, const char *name,
const char *volume, loc_t *loc, const char *name,
entrylk_cmd cmd, entrylk_type type)
{
server_state_t *state = NULL;
@ -6218,7 +6226,7 @@ server_entrylk_resume (call_frame_t *frame,
server_entrylk_cbk,
BOUND_XL(frame),
BOUND_XL(frame)->fops->entrylk,
loc, name, cmd, type);
volume, loc, name, cmd, type);
return 0;
}
@ -6242,6 +6250,7 @@ server_entrylk (call_frame_t *frame,
call_stub_t *entrylk_stub = NULL;
size_t pathlen = 0;
size_t namelen = 0;
size_t vollen = 0;
req = gf_param (hdr);
state = CALL_STATE(frame);
@ -6254,6 +6263,9 @@ server_entrylk (call_frame_t *frame,
if (namelen)
state->name = req->name + pathlen;
vollen = STRLEN_0(req->volume + pathlen + namelen);
state->volume = req->volume + pathlen + namelen;
state->cmd = ntoh32 (req->cmd);
state->type = ntoh32 (req->type);
}
@ -6264,6 +6276,7 @@ server_entrylk (call_frame_t *frame,
entrylk_stub = fop_entrylk_stub (frame,
server_entrylk_resume,
state->volume,
&state->loc, state->name, state->cmd,
state->type);
@ -6287,6 +6300,7 @@ server_fentrylk (call_frame_t *frame,
gf_fop_fentrylk_req_t *req = NULL;
server_state_t *state = NULL;
size_t namelen = 0;
size_t vollen = 0;
server_connection_t *conn = NULL;
conn = SERVER_CONNECTION(frame);
@ -6305,6 +6319,9 @@ server_fentrylk (call_frame_t *frame,
if (namelen)
state->name = req->name;
vollen = STRLEN_0(req->volume + namelen);
state->volume = req->volume + namelen;
}
if (state->fd == NULL) {
@ -6324,7 +6341,8 @@ server_fentrylk (call_frame_t *frame,
STACK_WIND (frame, server_fentrylk_cbk,
BOUND_XL(frame),
BOUND_XL(frame)->fops->fentrylk,
state->fd, state->name, state->cmd, state->type);
state->volume, state->fd, state->name,
state->cmd, state->type);
return 0;
}

View File

@ -42,6 +42,7 @@ typedef struct _server_state server_state_t;
struct _locker {
struct list_head lockers;
char *volume;
loc_t loc;
fd_t *fd;
pid_t pid;
@ -138,6 +139,7 @@ struct _server_state {
struct flock flock;
struct timespec tv[2];
char *resolved;
const char *volume;
};

View File

@ -2959,7 +2959,7 @@ out:
int32_t
bdb_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
frame->root->rsp_refs = NULL;
@ -2973,7 +2973,7 @@ bdb_inodelk (call_frame_t *frame, xlator_t *this,
int32_t
bdb_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
frame->root->rsp_refs = NULL;
@ -2987,8 +2987,8 @@ bdb_finodelk (call_frame_t *frame, xlator_t *this,
int32_t
bdb_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename, entrylk_cmd cmd,
entrylk_type type)
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
frame->root->rsp_refs = NULL;
@ -3002,8 +3002,8 @@ bdb_entrylk (call_frame_t *frame, xlator_t *this,
int32_t
bdb_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename, entrylk_cmd cmd,
entrylk_type type)
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
frame->root->rsp_refs = NULL;

View File

@ -3431,7 +3431,7 @@ posix_lk (call_frame_t *frame, xlator_t *this,
int32_t
posix_inodelk (call_frame_t *frame, xlator_t *this,
loc_t *loc, int32_t cmd, struct flock *lock)
const char *volume, loc_t *loc, int32_t cmd, struct flock *lock)
{
frame->root->rsp_refs = NULL;
@ -3445,7 +3445,7 @@ posix_inodelk (call_frame_t *frame, xlator_t *this,
int32_t
posix_finodelk (call_frame_t *frame, xlator_t *this,
fd_t *fd, int32_t cmd, struct flock *lock)
const char *volume, fd_t *fd, int32_t cmd, struct flock *lock)
{
frame->root->rsp_refs = NULL;
@ -3460,8 +3460,8 @@ posix_finodelk (call_frame_t *frame, xlator_t *this,
int32_t
posix_entrylk (call_frame_t *frame, xlator_t *this,
loc_t *loc, const char *basename, entrylk_cmd cmd,
entrylk_type type)
const char *volume, loc_t *loc, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
frame->root->rsp_refs = NULL;
@ -3475,8 +3475,8 @@ posix_entrylk (call_frame_t *frame, xlator_t *this,
int32_t
posix_fentrylk (call_frame_t *frame, xlator_t *this,
fd_t *fd, const char *basename, entrylk_cmd cmd,
entrylk_type type)
const char *volume, fd_t *fd, const char *basename,
entrylk_cmd cmd, entrylk_type type)
{
frame->root->rsp_refs = NULL;