Hi!
Thank you for reply!
On 2015/08/05 01:27, Cyril Hrubis wrote:
> Hi!
>> +static void setup(void);
>> +static void umount2_verify(void);
>> +static int umount2_verify_1(void);
>> +static int umount2_verify_2(void);
>> +static int umount2_verify_3(void);
>> +static void cleanup(void);
>> +
>> +char *TCID = "umount2_02";
>> +int TST_TOTAL = 1;
>
> This is not right. The testcase does four testcases as far as I can
> tell. You should print PASS/FAIL for each of them and set TST_TOTAL = 4
>
I got it, thanks!
I will rewrite each of them respectively.
>> +#define DIR_MODE (S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
>> +#define FILE_MODE (S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID)
>> +#define MNTPOINT "mntpoint"
>> +#define EXP_ERRNO EAGAIN
>
> The EXP_ERRNO is not used at all, forget to remove it?
>
I forgot, sorry!
>> +static int fd;
>> +static int mount_flag;
>> +
>> +static const char *device;
>> +static const char *fs_type;
>> +
>> +int main(int ac, char **av)
>> +{
>> + int lc;
>> +
>> + tst_parse_opts(ac, av, NULL, NULL);
>> +
>> + setup();
>> +
>> + for (lc = 0; TEST_LOOPING(lc); lc++) {
>> + tst_count = 0;
>> +
>> + umount2_verify();
>> + }
>> +
>> + cleanup();
>> + tst_exit();
>> +}
>> +
>> +static void setup(void)
>> +{
>> + tst_require_root(NULL);
>> +
>> + if ((tst_kvercmp(2, 6, 8)) < 0) {
>> + tst_brkm(TCONF, NULL, "This test can only run on kernels "
>> + "that are 2.6.8 or higher");
>> + }
>> +
>> + tst_sig(NOFORK, DEF_HANDLER, NULL);
>> +
>> + tst_tmpdir();
>> +
>> + fs_type = tst_dev_fs_type();
>> + device = tst_acquire_device(cleanup);
>> +
>> + if (!device)
>> + tst_brkm(TCONF, cleanup, "Failed to obtain block device");
>> +
>> + tst_mkfs(cleanup, device, fs_type, NULL);
>> +
>> + SAFE_MKDIR(cleanup, MNTPOINT, DIR_MODE);
>> +
>> + TEST_PAUSE;
>> +}
>> +
>> +static void umount2_verify(void)
>> +{
>> + SAFE_MOUNT(cleanup, device, MNTPOINT, fs_type, 0, NULL);
>> + mount_flag = 1;
>> +
>> + if (umount2_verify_1())
>> + goto EXIT;
>> +
>> + if (umount2_verify_2())
>> + goto EXIT;
>> +
>> + /* a new accesse removes the expired mark of the mount point */
>> + fd = SAFE_CREAT(cleanup, MNTPOINT "/file", FILE_MODE);
>> +
>> + SAFE_CLOSE(cleanup, fd);
>> + fd = 0;
>> +
>> + if (umount2_verify_2())
>> + goto EXIT;
>> +
>> + if (umount2_verify_3())
>> + goto EXIT;
>> +
>> + mount_flag = 0;
>> +
>> + tst_resm(TPASS, "umount2(2) Passed");
>> +
>> +EXIT:
>> + if (mount_flag) {
>> + SAFE_UMOUNT(cleanup, MNTPOINT);
>> + mount_flag = 0;
>> + }
>> +}
>> +
>> +/* MNT_EXPIRE cannot be specified with either MNT_FORCE or MNT_DETACH */
>> +static int umount2_verify_1(void)
>> +{
>> + TEST(umount2(MNTPOINT, MNT_EXPIRE | MNT_FORCE));
>> +
>> + if (TEST_RETURN == 0 || TEST_ERRNO != EINVAL) {
>> + tst_resm(TFAIL | TTERRNO, "umount2(2) MNT_EXPIRE flag "
>> + "performed abnormally "
>> + "expected error = %d : %s",
>> + EINVAL, strerror(EINVAL));
> ^
> As last time, do not use strerror().
>
> Given that the expected errno will never
> change we can just print "expected EINVAL"
I see, thanks!
I will pay more attention to it.
>> + return 1;
>> + }
>> +
>> + TEST(umount2(MNTPOINT, MNT_EXPIRE | MNT_DETACH));
>> +
>> + if (TEST_RETURN == 0 || TEST_ERRNO != EINVAL) {
>> + tst_resm(TFAIL | TTERRNO, "umount2(2) MNT_EXPIRE flag "
>> + "performed abnormally "
>> + "expected error = %d : %s",
>> + EINVAL, strerror(EINVAL));
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +/* the initial call to umount2() with MNT_EXPIRE flag */
>> +static int umount2_verify_2(void)
>> +{
>> + TEST(umount2(MNTPOINT, MNT_EXPIRE));
>> +
>> + if (TEST_RETURN == 0 || TEST_ERRNO != EAGAIN) {
>> + tst_resm(TFAIL | TTERRNO, "umount2(2) MNT_EXPIRE flag "
>> + "performed abnormally "
>> + "expected error = %d : %s",
>> + EAGAIN, strerror(EAGAIN));
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>
> This function is nearly identical to to the half of umout_verify_1().
> Can you just write one verify function that takes umount flags in
> parameters, expected errno and some string that describes what is
> tested and use it instead both halfs of umout2_verify_1() and
> umout2_verify_2()?
>
I see, thanks for pointing it out!
I am going to rewrite the code as you said.
>> +/* the second call to umount2() with MNT_EXPIRE flag */
>> +static int umount2_verify_3(void)
>> +{
>> + TEST(umount2(MNTPOINT, MNT_EXPIRE));
>> +
>> + if (TEST_RETURN != 0) {
>> + tst_resm(TFAIL | TTERRNO, "umount2(2) Failed");
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>
> Also naming this umount2_verify_success() would be a bit more
> descriptive than adding _3.
>
OK, I understand.
I am going to split them into verify_failure and verify_success,
check the result respectively.
Best Regards,
Guangwen Feng
>> +static void cleanup(void)
>> +{
>> + if (fd > 0 && close(fd))
>> + tst_resm(TWARN | TERRNO, "Failed to close file");
>> +
>> + if (mount_flag && tst_umount(MNTPOINT))
>> + tst_resm(TWARN | TERRNO, "Failed to unmount");
>> +
>> + if (device)
>> + tst_release_device(NULL, device);
>> +
>> + tst_rmdir();
>> +}
>> --
>> 1.8.4.2
>>
>>
>> ------------------------------------------------------------------------------
>> Don't Limit Your Business. Reach for the Cloud.
>> GigeNET's Cloud Solutions provide you with the tools and support that
>> you need to offload your IT needs and focus on growing your business.
>> Configured For All Businesses. Start Your Cloud Today.
>> https://www.gigenetcloud.com/
>> _______________________________________________
>> Ltp-list mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list