Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-9936

ldiskfs_write_ldd() calls fsync(filep->_fileno) but doesn't fflush() flip first

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • Lustre 2.17.0
    • None
    • 3
    • 9223372036854775807

    Description

      In ldiskfs_write_ldd():

       270         num = fwrite(&mop->mo_ldd, sizeof(mop->mo_ldd), 1, filep);
       271         if (num < 1 && ferror(filep)) {
       272                 fprintf(stderr, "%s: Unable to write to file (%s): %s\n",
       273                         progname, filepnm, strerror(errno));
       274                 fclose(filep);
       275                 goto out_umnt;
       276         }
       277         fsync(filep->_fileno);
       278         fclose(filep);
       

      Calling fsync() without first calling fflush() is ineffective since there will likely still be unwritten data in the userspace buffer.

      Also we should use fileno(filp) instead of accessing filp->_fileno.

      We should check the returns of fflush(), fsync(), and fclose() for failure. Since an error is more likely to be reported there than from fwrite().

      Attachments

        Issue Links

          Activity

            People

              mvef Marc Vef
              jhammond John Hammond
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: