From patchwork Tue May 8 22:18:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 10387655 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C1CB260353 for ; Tue, 8 May 2018 22:18:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B085A28E13 for ; Tue, 8 May 2018 22:18:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A553028F9E; Tue, 8 May 2018 22:18:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2DC1728E13 for ; Tue, 8 May 2018 22:18:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756124AbeEHWSS (ORCPT ); Tue, 8 May 2018 18:18:18 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:34741 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756097AbeEHWSM (ORCPT ); Tue, 8 May 2018 18:18:12 -0400 Received: by mail-qt0-f196.google.com with SMTP id m5-v6so43210835qti.1; Tue, 08 May 2018 15:18:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tl88AdB65UQwLiQLRnVOSW6hKVxYuGltK/A9Rc5sLkc=; b=It9E/H3GI86W+ouWWkqc9GBh3wSA9GSmGYFm5fBz/eDMq5EOdXGt31v+S49Qe4ZK3z yPTpRJIBuKdqasHcFQxRyH4yubHj7BgaytkEC9XwpAgxjEGR+ybGdV6jjgueG6GLfFt4 aKgguTm0W850mNRV8yMiP5CATTjSpcWoq5IanAoVFZRNIzyrHujcud7O7gYzu0g3Pu10 hY4JFVBaDzDKetDZnRaEolkcLhxrPdOPuOpnqW91TH2QHMFKd6H61na6xPFqvDxrfvo6 zq+dehSQOTiombbkIyCbLb29yZZIcNY+mXaLIGn+f3KjCJdOAGMMTKAO9BjoafTYsO33 vufQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=tl88AdB65UQwLiQLRnVOSW6hKVxYuGltK/A9Rc5sLkc=; b=n7PhpeSpoUwGeK7/FXUyLJo2mrmzg1sTpuItb44kejS4zJv+M+1rZH7vZ9ApK/Fil/ b/EPxAwB0OzqJG1wzZp3LaFQblX+6DYYA9pAK8MBN/iZB7EGppi3mBE5gTZC1xvUo15s szlYpEGq15NCAqcmE5QmJWKMRdhpBi7mk1rG2Ek32saCJ3rSP11t6LcQfaFD5IbJV1Em DadRKNLwJRL8XdTA77va22q4Vzi4q4qVjal3VFr1JNmifvD+mnOMzgK5OxuAqD84al9t sthJc/Sb1EmoiESOnVRflrw60mLOIBV/Wrdq0aRdvP1F4xDQckqwjWe5NGnjH63k2qyY KtYQ== X-Gm-Message-State: ALQs6tC5lTCbLmw7ZuHKkZFCVaDkFHAMqALfCDThOfKImq8gk+aYFec8 UBimLo3rcH2RXUKhZttNPiDxdrmQMQ== X-Google-Smtp-Source: AB8JxZps96QZp/0BiADwzIS+JEfcIjUtBs1JbWMbpUED5q/anLJ0JaWFnenkjPN2cstmPcziX1+Uig== X-Received: by 2002:a0c:f88e:: with SMTP id u14-v6mr23511992qvn.61.1525817890657; Tue, 08 May 2018 15:18:10 -0700 (PDT) Received: from localhost.localdomain (c-71-234-172-214.hsd1.vt.comcast.net. [71.234.172.214]) by smtp.gmail.com with ESMTPSA id k188sm19584472qkf.57.2018.05.08.15.18.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 May 2018 15:18:09 -0700 (PDT) From: Kent Overstreet To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org Cc: Kent Overstreet , Dave Chinner , "Darrick J . Wong" , hare@suse.com Subject: [PATCH 2/2] bcachefs: Ioctl interface Date: Tue, 8 May 2018 18:18:00 -0400 Message-Id: <20180508221800.2642-3-kent.overstreet@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180508221800.2642-1-kent.overstreet@gmail.com> References: <20180508221800.2642-1-kent.overstreet@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Kent Overstreet --- fs/bcachefs/bcachefs_ioctl.h | 182 +++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 fs/bcachefs/bcachefs_ioctl.h diff --git a/fs/bcachefs/bcachefs_ioctl.h b/fs/bcachefs/bcachefs_ioctl.h new file mode 100644 index 0000000000..4442a02b5c --- /dev/null +++ b/fs/bcachefs/bcachefs_ioctl.h @@ -0,0 +1,182 @@ +#ifndef _BCACHEFS_IOCTL_H +#define _BCACHEFS_IOCTL_H + +#include +#include +#include "bcachefs_format.h" + +/* + * Flags common to multiple ioctls: + */ +#define BCH_FORCE_IF_DATA_LOST (1 << 0) +#define BCH_FORCE_IF_METADATA_LOST (1 << 1) +#define BCH_FORCE_IF_DATA_DEGRADED (1 << 2) +#define BCH_FORCE_IF_METADATA_DEGRADED (1 << 3) + +#define BCH_FORCE_IF_DEGRADED \ + (BCH_FORCE_IF_DATA_DEGRADED| \ + BCH_FORCE_IF_METADATA_DEGRADED) + +/* + * If cleared, ioctl that refer to a device pass it as a pointer to a pathname + * (e.g. /dev/sda1); if set, the dev field is the device's index within the + * filesystem: + */ +#define BCH_BY_INDEX (1 << 4) + +/* + * For BCH_IOCTL_READ_SUPER: get superblock of a specific device, not filesystem + * wide superblock: + */ +#define BCH_READ_DEV (1 << 5) + +/* global control dev: */ + +/* These are currently broken, and probably unnecessary: */ +#if 0 +#define BCH_IOCTL_ASSEMBLE _IOW(0xbc, 1, struct bch_ioctl_assemble) +#define BCH_IOCTL_INCREMENTAL _IOW(0xbc, 2, struct bch_ioctl_incremental) + +struct bch_ioctl_assemble { + __u32 flags; + __u32 nr_devs; + __u64 pad; + __u64 devs[]; +}; + +struct bch_ioctl_incremental { + __u32 flags; + __u64 pad; + __u64 dev; +}; +#endif + +/* filesystem ioctls: */ + +#define BCH_IOCTL_QUERY_UUID _IOR(0xbc, 1, struct bch_ioctl_query_uuid) +#define BCH_IOCTL_START _IOW(0xbc, 2, struct bch_ioctl_start) +#define BCH_IOCTL_STOP _IO(0xbc, 3) +#define BCH_IOCTL_DISK_ADD _IOW(0xbc, 4, struct bch_ioctl_disk) +#define BCH_IOCTL_DISK_REMOVE _IOW(0xbc, 5, struct bch_ioctl_disk) +#define BCH_IOCTL_DISK_ONLINE _IOW(0xbc, 6, struct bch_ioctl_disk) +#define BCH_IOCTL_DISK_OFFLINE _IOW(0xbc, 7, struct bch_ioctl_disk) +#define BCH_IOCTL_DISK_SET_STATE _IOW(0xbc, 8, struct bch_ioctl_disk_set_state) +#define BCH_IOCTL_DATA _IOW(0xbc, 10, struct bch_ioctl_data) +#define BCH_IOCTL_USAGE _IOWR(0xbc, 11, struct bch_ioctl_usage) +#define BCH_IOCTL_READ_SUPER _IOW(0xbc, 12, struct bch_ioctl_read_super) +#define BCH_IOCTL_DISK_GET_IDX _IOW(0xbc, 13, struct bch_ioctl_disk_get_idx) +#define BCH_IOCTL_DISK_RESIZE _IOW(0xbc, 13, struct bch_ioctl_disk_resize) + +struct bch_ioctl_query_uuid { + uuid_le uuid; +}; + +struct bch_ioctl_start { + __u32 flags; + __u32 pad; +}; + +struct bch_ioctl_disk { + __u32 flags; + __u32 pad; + __u64 dev; +}; + +struct bch_ioctl_disk_set_state { + __u32 flags; + __u8 new_state; + __u8 pad[3]; + __u64 dev; +}; + +/* + * BCH_IOCTL_DATA: operations that walk and manipulate filesystem data (e.g. + * scrub, rereplicate, migrate). + * + * This ioctl kicks off a job in the background, and returns a file descriptor. + * Reading from the file descriptor returns a struct bch_ioctl_data_progress, + * indicating current progress, and closing the file descriptor will stop the + * job. The file descriptor is O_CLOEXEC. + */ + +enum bch_data_ops { + BCH_DATA_OP_SCRUB = 0, + BCH_DATA_OP_REREPLICATE = 1, + BCH_DATA_OP_MIGRATE = 2, + BCH_DATA_OP_NR = 3, +}; + +struct bch_ioctl_data { + __u32 op; + __u32 flags; + + struct bpos start; + struct bpos end; + + union { + struct { + __u32 dev; + __u32 pad; + } migrate; + }; +} __attribute__((packed, aligned(8))); + +struct bch_ioctl_data_progress { + __u8 data_type; + __u8 btree_id; + __u8 pad[2]; + struct bpos pos; + + __u64 sectors_done; + __u64 sectors_total; +} __attribute__((packed, aligned(8))); + +struct bch_ioctl_dev_usage { + __u8 state; + __u8 alive; + __u8 pad[6]; + __u32 dev; + + __u32 bucket_size; + __u64 nr_buckets; + + __u64 buckets[BCH_DATA_NR]; + __u64 sectors[BCH_DATA_NR]; +}; + +struct bch_ioctl_fs_usage { + __u64 capacity; + __u64 used; + __u64 online_reserved; + __u64 persistent_reserved[BCH_REPLICAS_MAX]; + __u64 sectors[BCH_DATA_NR][BCH_REPLICAS_MAX]; +}; + +struct bch_ioctl_usage { + __u16 nr_devices; + __u16 pad[3]; + + struct bch_ioctl_fs_usage fs; + struct bch_ioctl_dev_usage devs[0]; +}; + +struct bch_ioctl_read_super { + __u32 flags; + __u32 pad; + __u64 dev; + __u64 size; + __u64 sb; +}; + +struct bch_ioctl_disk_get_idx { + __u64 dev; +}; + +struct bch_ioctl_disk_resize { + __u32 flags; + __u32 pad; + __u64 dev; + __u64 nbuckets; +}; + +#endif /* _BCACHEFS_IOCTL_H */