mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
dlm for 6.8
This set cleans up the interface between nfs lockd and dlm, which is handling nfs file locking for gfs2 and ocfs2. Very basic lockd functionality is fixed, in which the fl owner was using the lockd pid instead of the owner value from nfs. -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEcGkeEvkvjdvlR90nOBtzx/yAaaoFAmWDZFwACgkQOBtzx/yA aapu/hAAx/9ahq4Vm+T7Lpw6wGEKISUi5djZlqrN7EddHcyAMFFX/41PkOez9KJT Rr4Mp+MBB6xjDDco4uVZxhnWJCI6RKExSB4N+eMx0Rhs09Ksf8UCtxTvKaDa18fr ZwPmGNpE/a3khTkwC5h/98m8kOyYIqSOL8/cR8zGytkHkgDiyv4VqD0cHAvwxR5a O8jQDtssXld6sF5GxhVQnLQiu0eVfFLlaaSsb28ju+yMPVOTDxmwNkP3eP+8d1le lcNp82+C7UmzO5Ds1/SgBIJZoej/xipz00BAlGH1oieD4xRLCbkoJSQsGxpkPwEI I1V8fd7zaFQ1VnDHMeMrjl46qjUQKkCfDK/v9BCvN5x8sCqaqUydMQ0mD/424NXe A/JgjAtloIhIOqmX/K/h4jioTrFlVevtTAr9Cv/sq31VX0+ALJVS3ccbhv68gjiW Cflef7Va53mXYfIAs6qc60/ArpvrPUG7Bna4aIb5iVJj4z/OOjnTxyZVOD3wJetY bs4w2dSrafX589EN/gIyKka3iOMcJS7wVsvRME9KYVikNbHgQrSpsixHPlLdjGq+ cHbozutVQYnhaGI608yMjPZ+rXu5jYEfAIQnI8FABbi4VR29+SnzxrZllMICUZ+Y pfRQ6YkiuBRy2HSbnwudemj6iSrPqZEts2GDkqj2LDfkMWeycKM= =UBeR -----END PGP SIGNATURE----- Merge tag 'dlm-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm Pull dlm updates from David Teigland: "This set cleans up the interface between nfs lockd and dlm, which is handling nfs file locking for gfs2 and ocfs2. Very basic lockd functionality is fixed, in which the fl owner was using the lockd pid instead of the owner value from nfs" * tag 'dlm-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm: dlm: update format header reflect current format dlm: fix format seq ops type 4 dlm: implement EXPORT_OP_ASYNC_LOCK dlm: use FL_SLEEP to determine blocking vs non-blocking dlm: use fl_owner from lockd dlm: use kernel_connect() and kernel_bind()
This commit is contained in:
commit
d8c8e595dc
@ -443,14 +443,14 @@ static int table_seq_show(struct seq_file *seq, void *iter_ptr)
|
||||
break;
|
||||
case 3:
|
||||
if (ri->header) {
|
||||
seq_puts(seq, "version rsb 1.1 lvb 1.1 lkb 1.1\n");
|
||||
seq_puts(seq, "rsb ptr nodeid first_lkid flags !root_list_empty !recover_list_empty recover_locks_count len\n");
|
||||
ri->header = 0;
|
||||
}
|
||||
print_format3(ri->rsb, seq);
|
||||
break;
|
||||
case 4:
|
||||
if (ri->header) {
|
||||
seq_puts(seq, "version 4 rsb 2\n");
|
||||
seq_puts(seq, "rsb ptr nodeid master_nodeid dir_nodeid our_nodeid toss_time flags len str|hex name\n");
|
||||
ri->header = 0;
|
||||
}
|
||||
print_format4(ri->rsb, seq);
|
||||
@ -748,7 +748,7 @@ static int table_open4(struct inode *inode, struct file *file)
|
||||
struct seq_file *seq;
|
||||
int ret;
|
||||
|
||||
ret = seq_open(file, &format5_seq_ops);
|
||||
ret = seq_open(file, &format4_seq_ops);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -1817,7 +1817,7 @@ static int dlm_tcp_bind(struct socket *sock)
|
||||
memcpy(&src_addr, &dlm_local_addr[0], sizeof(src_addr));
|
||||
make_sockaddr(&src_addr, 0, &addr_len);
|
||||
|
||||
result = sock->ops->bind(sock, (struct sockaddr *)&src_addr,
|
||||
result = kernel_bind(sock, (struct sockaddr *)&src_addr,
|
||||
addr_len);
|
||||
if (result < 0) {
|
||||
/* This *may* not indicate a critical error */
|
||||
@ -1830,7 +1830,7 @@ static int dlm_tcp_bind(struct socket *sock)
|
||||
static int dlm_tcp_connect(struct connection *con, struct socket *sock,
|
||||
struct sockaddr *addr, int addr_len)
|
||||
{
|
||||
return sock->ops->connect(sock, addr, addr_len, O_NONBLOCK);
|
||||
return kernel_connect(sock, addr, addr_len, O_NONBLOCK);
|
||||
}
|
||||
|
||||
static int dlm_tcp_listen_validate(void)
|
||||
@ -1862,7 +1862,7 @@ static int dlm_tcp_listen_bind(struct socket *sock)
|
||||
|
||||
/* Bind to our port */
|
||||
make_sockaddr(&dlm_local_addr[0], dlm_config.ci_tcp_port, &addr_len);
|
||||
return sock->ops->bind(sock, (struct sockaddr *)&dlm_local_addr[0],
|
||||
return kernel_bind(sock, (struct sockaddr *)&dlm_local_addr[0],
|
||||
addr_len);
|
||||
}
|
||||
|
||||
@ -1888,12 +1888,12 @@ static int dlm_sctp_connect(struct connection *con, struct socket *sock,
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Make sock->ops->connect() function return in specified time,
|
||||
* Make kernel_connect() function return in specified time,
|
||||
* since O_NONBLOCK argument in connect() function does not work here,
|
||||
* then, we should restore the default value of this attribute.
|
||||
*/
|
||||
sock_set_sndtimeo(sock->sk, 5);
|
||||
ret = sock->ops->connect(sock, addr, addr_len, 0);
|
||||
ret = kernel_connect(sock, addr, addr_len, 0);
|
||||
sock_set_sndtimeo(sock->sk, 0);
|
||||
return ret;
|
||||
}
|
||||
|
@ -140,11 +140,12 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
op->info.optype = DLM_PLOCK_OP_LOCK;
|
||||
op->info.pid = fl->fl_pid;
|
||||
op->info.ex = (fl->fl_type == F_WRLCK);
|
||||
op->info.wait = IS_SETLKW(cmd);
|
||||
op->info.wait = !!(fl->fl_flags & FL_SLEEP);
|
||||
op->info.fsid = ls->ls_global_id;
|
||||
op->info.number = number;
|
||||
op->info.start = fl->fl_start;
|
||||
op->info.end = fl->fl_end;
|
||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
||||
/* async handling */
|
||||
if (fl->fl_lmops && fl->fl_lmops->lm_grant) {
|
||||
op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
|
||||
@ -154,9 +155,6 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* fl_owner is lockd which doesn't distinguish
|
||||
processes on the nfs client */
|
||||
op->info.owner = (__u64) fl->fl_pid;
|
||||
op_data->callback = fl->fl_lmops->lm_grant;
|
||||
locks_init_lock(&op_data->flc);
|
||||
locks_copy_lock(&op_data->flc, fl);
|
||||
@ -168,8 +166,6 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
send_op(op);
|
||||
rv = FILE_LOCK_DEFERRED;
|
||||
goto out;
|
||||
} else {
|
||||
op->info.owner = (__u64)(long) fl->fl_owner;
|
||||
}
|
||||
|
||||
send_op(op);
|
||||
@ -326,10 +322,7 @@ int dlm_posix_unlock(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
op->info.number = number;
|
||||
op->info.start = fl->fl_start;
|
||||
op->info.end = fl->fl_end;
|
||||
if (fl->fl_lmops && fl->fl_lmops->lm_grant)
|
||||
op->info.owner = (__u64) fl->fl_pid;
|
||||
else
|
||||
op->info.owner = (__u64)(long) fl->fl_owner;
|
||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
||||
|
||||
if (fl->fl_flags & FL_CLOSE) {
|
||||
op->info.flags |= DLM_PLOCK_FL_CLOSE;
|
||||
@ -389,7 +382,7 @@ int dlm_posix_cancel(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
info.number = number;
|
||||
info.start = fl->fl_start;
|
||||
info.end = fl->fl_end;
|
||||
info.owner = (__u64)fl->fl_pid;
|
||||
info.owner = (__u64)(long)fl->fl_owner;
|
||||
|
||||
rv = do_lock_cancel(&info);
|
||||
switch (rv) {
|
||||
@ -450,10 +443,7 @@ int dlm_posix_get(dlm_lockspace_t *lockspace, u64 number, struct file *file,
|
||||
op->info.number = number;
|
||||
op->info.start = fl->fl_start;
|
||||
op->info.end = fl->fl_end;
|
||||
if (fl->fl_lmops && fl->fl_lmops->lm_grant)
|
||||
op->info.owner = (__u64) fl->fl_pid;
|
||||
else
|
||||
op->info.owner = (__u64)(long) fl->fl_owner;
|
||||
op->info.owner = (__u64)(long)fl->fl_owner;
|
||||
|
||||
send_op(op);
|
||||
wait_event(recv_wq, (op->done != 0));
|
||||
|
@ -190,5 +190,6 @@ const struct export_operations gfs2_export_ops = {
|
||||
.fh_to_parent = gfs2_fh_to_parent,
|
||||
.get_name = gfs2_get_name,
|
||||
.get_parent = gfs2_get_parent,
|
||||
.flags = EXPORT_OP_ASYNC_LOCK,
|
||||
};
|
||||
|
||||
|
@ -280,4 +280,5 @@ const struct export_operations ocfs2_export_ops = {
|
||||
.fh_to_dentry = ocfs2_fh_to_dentry,
|
||||
.fh_to_parent = ocfs2_fh_to_parent,
|
||||
.get_parent = ocfs2_get_parent,
|
||||
.flags = EXPORT_OP_ASYNC_LOCK,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user