[CRIU] [PATCH v4 6/6] zdtm: Add unlink_regular00 test
Kirill Tkhai
ktkhai at virtuozzo.com
Thu Jan 28 03:28:39 PST 2016
On 27.01.2016 18:35, Pavel Emelyanov wrote:
> On 01/27/2016 06:25 PM, Kirill Tkhai wrote:
>>
>>
>> On 27.01.2016 17:11, Pavel Emelyanov wrote:
>>> On 01/25/2016 07:40 PM, Kirill Tkhai wrote:
>>>> Test checks that a deleted file content in a deleted parent directory
>>>> restores right. Initially directory is created in a separate mount,
>>>> to check the ghost file is created in right mount and link() in
>>>> rfi_remap() is working.
>>>
>>> That's test for ghost files, how about the one for link remaps?
>>
>> Hm. But how is it touched by my patch?
>
> open_path is patched in patch #5. Other than this, the issue might exist
> for link remap files too, just modify your test slightly adding a hard
> link on the file being deleted with its parent dir.
Dump fails if we have such situation. This needs additional support.
>>>> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
>>>> ---
>>>> test/zdtm/live/static/Makefile | 1
>>>> test/zdtm/live/static/unlink_regular00.c | 100 +++++++++++++++++++++++++++
>>>> test/zdtm/live/static/unlink_regular00.desc | 1
>>>> 3 files changed, 102 insertions(+)
>>>> create mode 100644 test/zdtm/live/static/unlink_regular00.c
>>>> create mode 100644 test/zdtm/live/static/unlink_regular00.desc
>>>>
>>>> diff --git a/test/zdtm/live/static/Makefile b/test/zdtm/live/static/Makefile
>>>> index 357b784..60b5afc 100644
>>>> --- a/test/zdtm/live/static/Makefile
>>>> +++ b/test/zdtm/live/static/Makefile
>>>> @@ -224,6 +224,7 @@ TST_DIR = \
>>>> mnt_ext_master \
>>>> mntns_deleted \
>>>> binfmt_misc \
>>>> + unlink_regular00 \
>>>>
>>>> TST_DIR_FILE = \
>>>> chroot \
>>>> diff --git a/test/zdtm/live/static/unlink_regular00.c b/test/zdtm/live/static/unlink_regular00.c
>>>> new file mode 100644
>>>> index 0000000..22adaf6
>>>> --- /dev/null
>>>> +++ b/test/zdtm/live/static/unlink_regular00.c
>>>> @@ -0,0 +1,100 @@
>>>> +#include <errno.h>
>>>> +#include <fcntl.h>
>>>> +#include <stdlib.h>
>>>> +#include <sys/types.h>
>>>> +#include <sys/stat.h>
>>>> +#include <sys/mount.h>
>>>> +#include <unistd.h>
>>>> +#include <string.h>
>>>> +#include <limits.h>
>>>> +
>>>> +#include "zdtmtst.h"
>>>> +
>>>> +const char *test_doc = "Checkpointing/restore of unlinked file inside unlinked directory";
>>>> +const char *test_author = "Kirill Tkhai <ktkhai at virtuozzo.com>";
>>>> +
>>>> +char *dirname;
>>>> +TEST_OPTION(dirname, string, "directory name", 1);
>>>> +
>>>> +#define SUBDIR "subdir"
>>>> +#define FNAME "testfile"
>>>> +#define MSG "Hello!!!111"
>>>> +
>>>> +int main(int argc, char ** argv)
>>>> +{
>>>> + char subdir[PATH_MAX], fname[PATH_MAX];
>>>> + char buf[sizeof(MSG) + 1];
>>>> + int fd, ret = -1;
>>>> +
>>>> + test_init(argc, argv);
>>>> +
>>>> + memset(buf, 0, sizeof(buf));
>>>> +
>>>> + if (mkdir(dirname, 0777)) {
>>>> + fail("can't create %s", dirname);
>>>> + exit(1);
>>>> + }
>>>> +
>>>> + if (mount("none", dirname, "tmpfs", 0, "") < 0) {
>>>> + fail("can't mount tmpfs to %s", dirname);
>>>> + goto rm_topdir;
>>>> + }
>>>> +
>>>> + sprintf(subdir, "%s/" SUBDIR, dirname);
>>>> +
>>>> + if (mkdir(subdir, 0777)) {
>>>> + fail("can't create %s", subdir);
>>>> + goto umount;
>>>> + }
>>>> +
>>>> + sprintf(fname, "%s/" SUBDIR "/" FNAME, dirname);
>>>> +
>>>> + fd = open(fname, O_RDWR | O_CREAT, 0644);
>>>> + if (fd < 0) {
>>>> + fail("can't open %s", fname);
>>>> + rmdir(subdir);
>>>> + goto umount;
>>>> + }
>>>> +
>>>> + if (unlink(fname) || rmdir(subdir)) {
>>>> + fail("can't unlink %s or %s", fname, subdir);
>>>> + goto close_file;
>>>> + }
>>>> +
>>>> + if (write(fd, MSG, sizeof(MSG)) != sizeof(MSG)) {
>>>> + fail("can't write %s", fname);
>>>> + goto close_file;
>>>> + }
>>>> +
>>>> + test_daemon();
>>>> + test_waitsig();
>>>> +
>>>> + if (lseek(fd, 0, SEEK_SET) != 0) {
>>>> + fail("can't lseek %s", fname);
>>>> + goto close_file;
>>>> + }
>>>> +
>>>> + if (read(fd, buf, sizeof(MSG)) != sizeof(MSG)) {
>>>> + fail("can't read %s", fname);
>>>> + goto close_file;
>>>> + }
>>>> +
>>>> + if (strcmp(buf, MSG)) {
>>>> + fail("content differs: %s, %s, sizeof=%d", buf, MSG, sizeof(MSG));
>>>> + goto close_file;
>>>> + }
>>>> +
>>>> + ret = 0;
>>>> + pass();
>>>> +
>>>> +close_file:
>>>> + close(fd);
>>>> +umount:
>>>> + if (umount(dirname) < 0)
>>>> + pr_err("Can't umount\n");
>>>> +rm_topdir:
>>>> + if (rmdir(dirname) < 0)
>>>> + pr_err("Can't rmdir()\n");
>>>> +
>>>> + return ret;
>>>> +}
>>>> diff --git a/test/zdtm/live/static/unlink_regular00.desc b/test/zdtm/live/static/unlink_regular00.desc
>>>> new file mode 100644
>>>> index 0000000..dfe829b
>>>> --- /dev/null
>>>> +++ b/test/zdtm/live/static/unlink_regular00.desc
>>>> @@ -0,0 +1 @@
>>>> +{'flavor': 'ns', 'flags': 'suid'}
>>>>
>>>> .
>>>>
>>>
>> .
>>
>
More information about the CRIU
mailing list