diff --git a/fs/bcachefs/snapshot.c b/fs/bcachefs/snapshot.c
index 0c65065b08ec..8862714b1806 100644
--- a/fs/bcachefs/snapshot.c
+++ b/fs/bcachefs/snapshot.c
@@ -397,7 +397,11 @@ u32 bch2_snapshot_tree_oldest_subvol(struct bch_fs *c, u32 snapshot_root)
 
 	rcu_read_lock();
 	while (id) {
-		s = snapshot_t(c, id)->subvol;
+		const struct snapshot_t *snap = snapshot_t(c, id);
+		if (!snap)
+			break;
+
+		s = snap->subvol;
 
 		if (s && (!subvol || s < subvol))
 			subvol = s;