Message ID | 1463731940-13044-2-git-send-email-ghe@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Looks good. Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com> On 05/20/2016 03:12 AM, Gang He wrote: > This patch will be used to insure the dlm lockspace is created by kernel > module when mounting a ocfs2 file system. There are two ways to create a > lockspace, from user space and kernel space, but the same name lockspaces > probably have different lvblen lengths/flags. > To avoid this mix using, we add one more flag DLM_LSFL_NEWEXCL, it will make > sure the dlm lockspace is created by kernel module when mounting. > Secondly, if a user space program (ocfs2-tools) is running on a file system, > the user tries to mount this file system in the cluster, DLM module will return > a -EEXIST or -EPROTO errno, we should give the user a obvious error message, > then, the user can let that user space tool exit before mounting the file > system again. > > Signed-off-by: Gang He <ghe@suse.com> > --- > fs/ocfs2/stack_user.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/fs/ocfs2/stack_user.c b/fs/ocfs2/stack_user.c > index ced70c8..c9e828e 100644 > --- a/fs/ocfs2/stack_user.c > +++ b/fs/ocfs2/stack_user.c > @@ -1007,10 +1007,17 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn) > lc->oc_type = NO_CONTROLD; > > rc = dlm_new_lockspace(conn->cc_name, conn->cc_cluster_name, > - DLM_LSFL_FS, DLM_LVB_LEN, > + DLM_LSFL_FS | DLM_LSFL_NEWEXCL, DLM_LVB_LEN, > &ocfs2_ls_ops, conn, &ops_rv, &fsdlm); > - if (rc) > + if (rc) { > + if (rc == -EEXIST || rc == -EPROTO) > + printk(KERN_ERR "ocfs2: Unable to create the " > + "lockspace %s (%d), because a ocfs2-tools " > + "program is running on this file system " > + "with the same name lockspace\n", > + conn->cc_name, rc); > goto out; > + } > > if (ops_rv == -EOPNOTSUPP) { > lc->oc_type = WITH_CONTROLD; >
diff --git a/fs/ocfs2/stack_user.c b/fs/ocfs2/stack_user.c index ced70c8..c9e828e 100644 --- a/fs/ocfs2/stack_user.c +++ b/fs/ocfs2/stack_user.c @@ -1007,10 +1007,17 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn) lc->oc_type = NO_CONTROLD; rc = dlm_new_lockspace(conn->cc_name, conn->cc_cluster_name, - DLM_LSFL_FS, DLM_LVB_LEN, + DLM_LSFL_FS | DLM_LSFL_NEWEXCL, DLM_LVB_LEN, &ocfs2_ls_ops, conn, &ops_rv, &fsdlm); - if (rc) + if (rc) { + if (rc == -EEXIST || rc == -EPROTO) + printk(KERN_ERR "ocfs2: Unable to create the " + "lockspace %s (%d), because a ocfs2-tools " + "program is running on this file system " + "with the same name lockspace\n", + conn->cc_name, rc); goto out; + } if (ops_rv == -EOPNOTSUPP) { lc->oc_type = WITH_CONTROLD;
This patch will be used to insure the dlm lockspace is created by kernel module when mounting a ocfs2 file system. There are two ways to create a lockspace, from user space and kernel space, but the same name lockspaces probably have different lvblen lengths/flags. To avoid this mix using, we add one more flag DLM_LSFL_NEWEXCL, it will make sure the dlm lockspace is created by kernel module when mounting. Secondly, if a user space program (ocfs2-tools) is running on a file system, the user tries to mount this file system in the cluster, DLM module will return a -EEXIST or -EPROTO errno, we should give the user a obvious error message, then, the user can let that user space tool exit before mounting the file system again. Signed-off-by: Gang He <ghe@suse.com> --- fs/ocfs2/stack_user.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)