fix disk_protect for linux-2.6.27
authorPhil Sutter <phil@nwl.cc>
Sun, 14 Dec 2008 01:51:50 +0000 (02:51 +0100)
committerPhil Sutter <phil@nwl.cc>
Sun, 14 Dec 2008 01:51:50 +0000 (02:51 +0100)
The path for the sysfs attribute has changed. Also negative values show
disabled disk protect, so catch this when interpreting the file's
content.

ChangeLog
src/linux.c

index bf2f66c..0c32368 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2008-12-14
+       * Fix disk_protect for linux-2.6.27 (and hopefully above)
+
 2008-12-09
        * Add an option to timed_thread_test() to not wait for the interval period
        (so that IMAP IDLE works better)
index a5feb59..ab4d709 100644 (file)
@@ -2337,7 +2337,10 @@ const char *get_disk_protect_queue(const char *disk)
        char path[128];
        int state;
 
-       snprintf(path, 127, "/sys/block/%s/queue/protect", disk);
+       snprintf(path, 127, "/sys/block/%s/device/unload_heads", disk);
+       if (access(path, F_OK)) {
+               snprintf(path, 127, "/sys/block/%s/queue/protect", disk);
+       }
        if ((fp = fopen(path, "r")) == NULL)
                return "n/a   ";
        if (fscanf(fp, "%d\n", &state) != 1) {
@@ -2345,6 +2348,6 @@ const char *get_disk_protect_queue(const char *disk)
                return "failed";
        }
        fclose(fp);
-       return state ? "frozen" : "free  ";
+       return (state > 0) ? "frozen" : "free  ";
 }