[PATCH] s3-vfs: handle calling chdir after disconnect
严正
zyan at redhat.com
Thu Jan 15 18:51:38 MST 2015
I tested your patch. it works.
Regards
Yan, Zheng
> 在 2015年1月16日,00:46,Ira Cooper <ira at samba.org <mailto:ira at samba.org>> 写道:
>
> I'd argue you are papering over the real problem, which is that Samba shouldn't be doing that in the first place.
>
> Try this patch out, it swaps the two calls in the close_cnum.
>
> (The code is 100% untested!)
>
> Jeremy/Volker, I'd love your eyes on this one.
>
> Thanks,
>
> -Ira
>
> On Tue, Jan 13, 2015 at 9:19 PM, Yan, Zheng <zyan at redhat.com <mailto:zyan at redhat.com>> wrote:
> close_cnum() in smbd/service.c calls SMB_VFS_DISCONNECT(), then
> calls vfs_ChDir(). ceph mount is shutdown when the last connection
> is disconnected. So we need to handle vfs_ChDir() when there is no
> ceph mount
>
> Signed-off-by: Yan, Zheng <zyan at redhat.com <mailto:zyan at redhat.com>>
> ---
> source3/modules/vfs_ceph.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
> index ec72312..ab81190 100644
> --- a/source3/modules/vfs_ceph.c
> +++ b/source3/modules/vfs_ceph.c
> @@ -152,6 +152,7 @@ static void cephwrap_disconnect(struct vfs_handle_struct *handle)
> ceph_shutdown(cmount);
>
> cmount = NULL; /* Make it safe */
> + handle->data = NULL;
> }
>
> /* Disk operations */
> @@ -223,6 +224,10 @@ static int cephwrap_statvfs(struct vfs_handle_struct *handle, const char *path,
> struct statvfs statvfs_buf;
> int ret;
>
> + if (!handle->data) {
> + WRAP_RETURN(-ENOTCONN);
> + }
> +
> ret = ceph_statfs(handle->data, path, &statvfs_buf);
> if (ret < 0) {
> WRAP_RETURN(ret);
> @@ -726,6 +731,10 @@ static int cephwrap_chdir(struct vfs_handle_struct *handle, const char *path)
> {
> int result = -1;
> DEBUG(10, ("[CEPH] chdir(%p, %s)\n", handle, path));
> +
> + if (!handle->data) {
> + WRAP_RETURN(-ENOTCONN);
> + }
> /*
> * If the path is just / use chdir because Ceph is below / and
> * cannot deal with changing directory above its mount point
> @@ -740,7 +749,11 @@ static int cephwrap_chdir(struct vfs_handle_struct *handle, const char *path)
>
> static char *cephwrap_getwd(struct vfs_handle_struct *handle)
> {
> - const char *cwd = ceph_getcwd(handle->data);
> + const char *cwd;
> + if (handle->data)
> + cwd = ceph_getcwd(handle->data);
> + else
> + cwd = "/";
> DEBUG(10, ("[CEPH] getwd(%p) = %s\n", handle, cwd));
> return SMB_STRDUP(cwd);
> }
> --
> 1.9.3
>
>
> <look>
More information about the samba-technical
mailing list