sf...@users.sourceforge.net: > I will dive into these two problems, > - the return code of "encode_fh()" > - supporting name_to_handle_at() > when I have enough time. > Unfortunately I am busy in these days, and I don't know when it will be.
I have took a glance at "encode_fh()" and name_to_handle_at(), and found that aufs has nothing necessary to support it. - the protocol around the return code of "encode_fh()" is unchanged. - aufs already supports name_to_handle_at(). Also I looked at systemd and found the suspicous code around handling the error of name_to_handle_at(). - systemd calls name_to_handle_at() - name_to_handle_at() calls aufs's "encode_fh()" - "encode_fh()" return an error since your branch fs is NFS which doesn't support exporting via NFS. - name_to_handle_at() gets 255 from aufs and returns EOVERFLOW to userspace. linux/fs/fhandle.c:do_sys_name_to_handle() /* we ask for a non connected handle */ retval = exportfs_encode_fh(path->dentry, (struct fid *)handle->f_handle, &handle_dwords, 0); // which calls aufs's "encode_fh()" ::: if ((handle->handle_bytes > f_handle.handle_bytes) || (retval == 255) || (retval == -ENOSPC)) { /* As per old exportfs_encode_fh documentation * we could return ENOSPC to indicate overflow * But file system returned 255 always. So handle * both the values */ /* * set the handle size to zero so we copy only * non variable part of the file_handle */ handle_bytes = 0; retval = -EOVERFLOW; } else retval = 0; - systemd gets EOVERFLOW from name_to_handle_at(), but it doesn't handle this error code. systemd/src/shared/path-util.c:path_is_mount_point() r = name_to_handle_at(AT_FDCWD, t, h, &mount_id, allow_symlink ? AT_SYMLINK_FOLLOW : 0); if (r < 0) { if (errno == ENOSYS || errno == ENOTSUP) /* This kernel or file system does not support * name_to_handle_at(), hence fallback to the * traditional stat() logic */ goto fallback; if (errno == ENOENT) return 0; return -errno; } ::: r = name_to_handle_at(AT_FDCWD, parent, h, &mount_id_parent, 0); ::: if (r < 0) { /* The parent can't do name_to_handle_at() but the * directory we are interested in can? If so, it must * be a mount point */ if (errno == ENOTSUP) return 1; return -errno; } Although I didn't read the systemd's fallback routine, my current conclusion is, - as long as systemd doesn't handle EOVERFLOW (and doesn't go into the fallback routine), systemd will not work with many(? a few?) fs, I am afraid. - if systemd support EOVERFLOW, aufs can co-work with systemd. the "nfs branch is not exportable" message will be still produced, but systemd will go into its fallback routine. - since systemd has "configure" script and if you disable CONFIG_FHANDLE, then systemd will not try calling name_to_handle_at(). And it will go into the fallback routine. and you will be happy too. J. R. Okajima ------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov