Coverage report: /home/ellis/comp/core/lib/io/disk/btrfs.lisp

KindCoveredAll%
expression966 13.6
branch16 16.7
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;; btrfs.lisp --- BTRFS API
2
 
3
 ;; High-level BTRFS backend for IO/DISK
4
 
5
 ;;; Code:
6
 (in-package :io/disk/btrfs)
7
 
8
 (defun load-btrfs-libs ()
9
   (load-btrfs)
10
   (load-btrfsutil))
11
 
12
 (define-condition btrfs-error (io-error) ())
13
 
14
 (deferror btrfs-simple-error (simple-error btrfs-error) () (:auto t))
15
 
16
 (defclass btrfs-disk (disk) ())
17
 
18
 (defclass btrfs-partition (disk-partition) ())
19
 
20
 (defclass btrfs-subvolume (disk-subvolume disk) ())
21
 
22
 (defun subvolume-valid-p (subvol)
23
   (etypecase subvol
24
     (string (zerop (btrfs-util-subvolume-is-valid subvol)))
25
     (pathname (zerop (btrfs-util-subvolume-is-valid (namestring subvol))))
26
     (disk (zerop (btrfs-util-subvolume-is-valid (namestring (path subvol)))))))
27
 
28
 (defclass btrfs-snapshot (disk-snapshot disk) ())
29
 
30
   (defmethods sync 
31
     (((self btrfs-subvolume) &key)
32
      (btrfs-util-fs-sync (namestring (path self))))
33
     (((self btrfs-disk) &key)
34
      (btrfs-util-fs-sync (namestring (path self)))))
35
          
36
 (defun btrfs-subvolumes (path)
37
   (when (subvolume-valid-p path)
38
     (sb-alien:with-alien ((iter (* btrfs-util-subvolume-iterator)))
39
       (unwind-protect
40
            (progn
41
              (btrfs-util-subvolume-iter-create path 0 0 (sb-alien:addr iter))
42
              (with-alien ((path c-string)
43
                           (id (unsigned 64)))
44
                (loop while (zerop (btrfs-util-subvolume-iter-next 
45
                                    iter (addr path) (addr id)))
46
                      collect (cons path id))))
47
         (btrfs-util-subvolume-iter-destroy iter)))))
48
 
49
 (defun btrfs-default-subvolume (path)
50
   (with-alien ((id (unsigned 64)))
51
     (let ((res (btrfs-util-subvolume-get-default path (addr id))))
52
       (if (zerop res)
53
           id
54
           (btrfs-simple-error (btrfs-util-strerror res))))))