[dm-devel] device-mapper dmsetup/dmsetup.c man/dmsetup.8
agk at sourceware.org
agk at sourceware.org
Thu Nov 29 14:44:29 UTC 2007
CVSROOT: /cvs/dm
Module name: device-mapper
Changes by: agk at sourceware.org 2007-11-29 14:44:28
Modified files:
dmsetup : dmsetup.c
man : dmsetup.8
Log message:
refine specification of dmsetup readahead
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/dmsetup/dmsetup.c.diff?cvsroot=dm&r1=1.97&r2=1.98
http://sourceware.org/cgi-bin/cvsweb.cgi/device-mapper/man/dmsetup.8.diff?cvsroot=dm&r1=1.19&r2=1.20
--- device-mapper/dmsetup/dmsetup.c 2007/11/27 20:57:05 1.97
+++ device-mapper/dmsetup/dmsetup.c 2007/11/29 14:44:28 1.98
@@ -150,6 +150,7 @@
static char *_table;
static char *_target;
static char *_command;
+static uint32_t _read_ahead_flags;
static struct dm_tree *_dtree;
static struct dm_report *_report;
static report_type_t _report_type;
@@ -497,9 +498,9 @@
if (_switches[NOOPENCOUNT_ARG] && !dm_task_no_open_count(dmt))
goto out;
- /* FIXME Provide way to set read_ahead_flags */
if (_switches[READAHEAD_ARG] &&
- !dm_task_set_read_ahead(dmt, _int_args[READAHEAD_ARG], 0))
+ !dm_task_set_read_ahead(dmt, _int_args[READAHEAD_ARG],
+ _read_ahead_flags))
goto out;
if (!dm_task_run(dmt))
@@ -681,9 +682,9 @@
if (_switches[NOLOCKFS_ARG] && !dm_task_skip_lockfs(dmt))
goto out;
- /* FIXME Provide way to set read_ahead_flags */
if (_switches[READAHEAD_ARG] &&
- !dm_task_set_read_ahead(dmt, _int_args[READAHEAD_ARG], 0))
+ !dm_task_set_read_ahead(dmt, _int_args[READAHEAD_ARG],
+ _read_ahead_flags))
goto out;
r = dm_task_run(dmt);
@@ -2037,8 +2038,8 @@
fprintf(out, "Usage:\n\n");
fprintf(out, "dmsetup [--version] [-v|--verbose [-v|--verbose ...]]\n"
- " [-r|--readonly] [--noopencount] [--nolockfs] "
- "[--readahead <sectors>]\n"
+ " [-r|--readonly] [--noopencount] [--nolockfs]\n"
+ " [--readahead [+]<sectors>|auto|none]\n"
" [-c|-C|--columns] [-o <fields>] [-O|--sort <sort_fields>]\n"
" [--noheadings] [--separator <separator>]\n\n");
for (i = 0; _commands[i].name; i++)
@@ -2382,7 +2383,7 @@
static int _process_switches(int *argc, char ***argv, const char *dev_dir)
{
- char *base, *namebase;
+ char *base, *namebase, *s;
static int ind;
int c, r;
@@ -2425,6 +2426,7 @@
*/
memset(&_switches, 0, sizeof(_switches));
memset(&_int_args, 0, sizeof(_int_args));
+ _read_ahead_flags = 0;
namebase = strdup((*argv)[0]);
base = basename(namebase);
@@ -2535,10 +2537,25 @@
_switches[NOLOCKFS_ARG]++;
if ((ind == NOOPENCOUNT_ARG))
_switches[NOOPENCOUNT_ARG]++;
- /* FIXME Accept auto/none & set read_ahead_flags too */
if ((ind == READAHEAD_ARG)) {
_switches[READAHEAD_ARG]++;
- _int_args[READAHEAD_ARG] = atoi(optarg);
+ if (!strcasecmp(optarg, "auto"))
+ _int_args[READAHEAD_ARG] = DM_READ_AHEAD_AUTO;
+ else if (!strcasecmp(optarg, "none"))
+ _int_args[READAHEAD_ARG] = DM_READ_AHEAD_NONE;
+ else {
+ for (s = optarg; isspace(*s); s++)
+ ;
+ if (*s == '+')
+ _read_ahead_flags = DM_READ_AHEAD_MINIMUM_FLAG;
+ _int_args[READAHEAD_ARG] = atoi(optarg);
+ if (_int_args[READAHEAD_ARG] < -1) {
+ log_error("Negative read ahead value "
+ "(%d) is not understood.",
+ _int_args[READAHEAD_ARG]);
+ return 0;
+ }
+ }
}
if ((ind == SHOWKEYS_ARG))
_switches[SHOWKEYS_ARG]++;
--- device-mapper/man/dmsetup.8 2007/11/27 20:57:05 1.19
+++ device-mapper/man/dmsetup.8 2007/11/29 14:44:28 1.20
@@ -114,9 +114,14 @@
.IP \fB-r|--readonly
.br
Set the table being loaded read-only.
-.IP \fB--readahead\ <sectors>
+.IP \fB--readahead\ [+]<sectors>|auto|none
.br
Specify read ahead size in units of sectors.
+The default value is "auto" which allows the kernel to choose
+a suitable value automatically. The + prefix lets you
+specify a minimum value which will not be used if it is
+smaller than the value chosen by the kernel.
+"None" is equivalent to specifying zero.
.IP \fB--table\ <table>
.br
Specify a one-line table directly on the command line.
More information about the dm-devel
mailing list