Make up your mind. You want sync. You don't want sync.

There is no reason to renew a subscription every 15 minutes.  Stop doing
that and this problem goes away.


On Oct 30, 2013, at 12:58 PM, Launchpad Bug Tracker 
<[email protected]> wrote:

> You have been subscribed to a public bug by Till Kamppeter (till-kamppeter):
> 
> cupsd  calls fsync() on /etc/subscriptions.conf.N every 14~15 minutes.
> This causes the hard disk to wake up soon after it spins down.
> Subscription renewal is from indicator-printers every 15 minutes.
> 
> I think we don't need cupsdRemoveFile() to always overwrite data and do a 
> fsync() for this file. Currently only Precise is confirmed to be affected. 
> Saucy seems not having the same issue according to
> (http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/saucy/cups/saucy/view/head:/scheduler/file.c#L149)
> 
> ---- block_dump from the kernel ----
> <7>[19935.646436] cupsd(1066): dirtied inode 15336755 (subscriptions.conf.N) 
> on sda3
> <7>[19935.646673] cupsd(1066): WRITE block 352753016 on sda3 (8 sectors)
> <7>[19935.646755] cupsd(1066): dirtied inode 15335603 (?) on sda3
> <7>[19935.646763] cupsd(1066): dirtied inode 15335603 (?) on sda3
> <7>[19935.646776] cupsd(1066): WRITE block 352701128 on sda3 (8 sectors)
> <7>[20774.607856] cupsd(1066): dirtied inode 15335603 (subscriptions.conf.N) 
> on sda3
> <7>[20774.608034] cupsd(1066): WRITE block 352862776 on sda3 (8 sectors)
> <7>[20774.608113] cupsd(1066): dirtied inode 15335607 (?) on sda3
> <7>[20774.608120] cupsd(1066): dirtied inode 15335607 (?) on sda3
> <7>[20774.608133] cupsd(1066): WRITE block 352753008 on sda3 (8 sectors)
> <7>[21613.569033] cupsd(1066): dirtied inode 15335607 (subscriptions.conf.N) 
> on sda3
> <7>[21613.569257] cupsd(1066): WRITE block 352753024 on sda3 (8 sectors)
> <7>[21613.569345] cupsd(1066): dirtied inode 15336755 (?) on sda3
> <7>[21613.569353] cupsd(1066): dirtied inode 15336755 (?) on sda3
> <7>[21613.569367] cupsd(1066): WRITE block 352753016 on sda3 (8 sectors)
> 
> ---- cups: scheduler/file.c ----
> int                                   /* O - 0 on success, -1 on error */
> cupsdCloseCreatedConfFile(
>     cups_file_t *fp,                  /* I - File to close */
>     const char  *filename)            /* I - Filename */
> {
> ...
>   snprintf(newfile, sizeof(newfile), "%s.N", filename);
>   snprintf(oldfile, sizeof(oldfile), "%s.O", filename);
> 
>   if ((cupsdRemoveFile(oldfile) && errno != ENOENT) ||
>       (rename(filename, oldfile) && errno != ENOENT) ||
>       rename(newfile, filename))
>   {
>     cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to finalize \"%s\": %s",
>                     filename, strerror(errno));
>     return (-1);
>   }
> 
>   return (0);
> }
> 
> int                                   /* O - 0 on success, -1 on error */
> cupsdRemoveFile(const char *filename) /* I - File to remove */
> {
> ...
>  /*
>   * Overwrite the file 7 times with 0xF6, 0x00, 0xFF, random, 0x00, 0xFF,
>   * and more random data.
>   */
> 
>   memset(buffer, 0xF6, sizeof(buffer));
>   if (overwrite_data(fd, buffer, sizeof(buffer), (int)info.st_size))
>   {
>     close(fd);
>     return (-1);
>   }
> ...
> }
> 
> static int                            /* O - 0 on success, -1 on error */
> overwrite_data(int        fd,         /* I - File descriptor */
>                const char *buffer,    /* I - Buffer to write */
>         int        bufsize,   /* I - Size of buffer */
>                int        filesize)   /* I - Size of file */
> {
>   int bytes;                          /* Bytes to write/written */
> 
>  /*
>   * Start at the beginning of the file...
>   */
> 
>   if (lseek(fd, 0, SEEK_SET) < 0)
>     return (-1);
> 
>  /*
>   * Fill the file with the provided data...
>   */
> 
>   while (filesize > 0)
>   {
>     if (filesize > bufsize)
>       bytes = bufsize;
>     else
>       bytes = filesize;
> 
>     if ((bytes = write(fd, buffer, bytes)) < 0)
>       return (-1);
> 
>     filesize -= bytes;
>   }
> 
>  /*
>   * Force the changes to disk...
>   */
> 
>   return (fsync(fd));
> }
> 
> ---- indicator-printers-service.c ----
> #define NOTIFY_LEASE_DURATION (15 * 60)
> 
> int main (int argc, char *argv[])
> {
> ...
>     g_timeout_add_seconds (NOTIFY_LEASE_DURATION - 60,
>                            renew_subscription_timeout,
>                            &subscription_id);
> ...
> }
> 
> ** Affects: ubuntu-power-consumption
>     Importance: Undecided
>         Status: New
> 
> ** Affects: cups (Ubuntu)
>     Importance: Undecided
>         Status: New
> 
> -- 
> cupsd wakes up the hard disk every 14 minutes
> https://bugs.launchpad.net/bugs/1244205
> You received this bug notification because you are subscribed to the bug 
> report.

_________________________________________________________
Michael Sweet, Senior Printing System Engineer, PWG Chair

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1244205

Title:
  cupsd wakes up the hard disk every 14 minutes

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-power-consumption/+bug/1244205/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to