tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: patch - cgdconfig do_all mode gracefully ignore detached devices
Thanks for your feedback! We cannot fail silently in configure as-is
due to the config/verification flow. However, if what was meant was
to check for ENXIO in the verification function, then that works, and
is a much simpler solution. In the below diff, we removed the check
on -U per the issues raised by Robert. For -C, we simply try to open
the device path. On error, if we get ENXIO we return 0.
Otherwise we let -1 pass through to be handled as expected in the
flow. Is this any closer to your liking? Tested and working as
expected. Thanks so much for your review
Index: cgdconfig.c
===================================================================
RCS file: /cvsroot/src/sbin/cgdconfig/cgdconfig.c,v
retrieving revision 1.50
diff -b -u -r1.50 cgdconfig.c
--- cgdconfig.c 10 Apr 2019 06:11:37 -0000 1.50
+++ cgdconfig.c 10 Nov 2019 15:09:33 -0000
@@ -125,6 +125,7 @@
static int verify_reenter(struct params *);
static int verify_mbr(int);
static int verify_gpt(int);
+static int verify_attached(const char * opath);
__dead static void usage(void);
@@ -540,6 +541,19 @@
return -1;
}
+ /* if called from do_all, then ignore if device is not attached */
+ if (flags == CONFIG_FLAGS_FROMALL) {
+
+ ret = verify_attached(argv[1]);
+
+ /* device unattached */
+ if (ret == 0) {
+ VPRINTF(1, ("skipping %s: device is not attached\n", argv[1]));
+ return 0;
+ }
+ /* pass-through success and errors */
+ }
+
if ((
fd = opendisk1(*argv, O_RDWR, cgdname, sizeof(cgdname), 1, prog_open)
) != -1) {
@@ -1282,3 +1296,25 @@
if (setrlimit(RLIMIT_CORE, &rlp) == -1)
err(EXIT_FAILURE, "Can't disable cores");
}
+
+static int
+verify_attached(const char * opath)
+ check if opath is accessible
+{
+ int fd;
+ char path[MAXPATHLEN];
+
+ fd = opendisk(opath,O_RDWR,path,sizeof(path),0);
+
+ if (fd == -1) {
+ if (errno == ENXIO) {
+ return 0;
+ }
+ return -1;
+ }
+
+ close(fd);
+
+ return 1;
+}
On Sun, Nov 10, 2019 at 1:42 AM Michael van Elst <mlelstv%serpens.de@localhost> wrote:
>
> On Sun, Nov 10, 2019 at 01:21:21AM -0600, Jason High wrote:
> > For -U, that could work (was actually how we handled it in an earlier
> > version). For -C, no. Our goal is to avoid cgd trying to configure a
> > device, like those backed by USB drives, on boot when the backing
> > device isn't attached.
>
> Why? Whether you rely on magic (== non-standard interfaces with
> unspecified semantics) to skip the configuration or the configuration
> just fails silently shouldn't make a difference.
>
>
> Greetings,
> --
> Michael van Elst
> Internet: mlelstv%serpens.de@localhost
> "A potential Snark may lurk in every tree."
Home |
Main Index |
Thread Index |
Old Index