This bug was fixed in the package indicator-printers - 0.1.7+14.04.20140313-0ubuntu1
--------------- indicator-printers (0.1.7+14.04.20140313-0ubuntu1) trusty; urgency=low [ Ted Gould ] * Synchronize process management across indicators. [ Lars Uebernickel ] * Change notification lease time to 24h (LP: #1244205) -- Ubuntu daily release <ps-jenk...@lists.canonical.com> Thu, 13 Mar 2014 22:04:55 +0000 ** Changed in: indicator-printers (Ubuntu) Status: New => Fix Released -- You received this bug notification because you are a member of DX Packages, which is subscribed to indicator-printers in Ubuntu. https://bugs.launchpad.net/bugs/1244205 Title: cupsd wakes up the hard disk every 14 minutes Status in The Ubuntu Power Consumption Project: New Status in “cups” package in Ubuntu: Won't Fix Status in “indicator-printers” package in Ubuntu: Fix Released Bug description: 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); ... } To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu-power-consumption/+bug/1244205/+subscriptions -- Mailing list: https://launchpad.net/~dx-packages Post to : dx-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~dx-packages More help : https://help.launchpad.net/ListHelp