* Snapshot names must be made up of alphanumeric characters plus the following
* characters:
*
- * [-_.:]
+ * [-_.: ]
*/
int
snapshot_namecheck(const char *path, namecheck_err_t *why, char *what)
* which is the same as MAXNAMELEN used in the kernel.
* If ZFS_MAXNAMELEN value is changed, make sure to cleanup all
* places using MAXNAMELEN.
+ *
+ * When HAVE_KOBJ_NAME_LEN is defined the maximum safe kobject name
+ * length is 20 bytes. This 20 bytes is broken down as follows to
+ * provide a maximum safe <pool>/<dataset>[@snapshot] length of only
+ * 18 bytes. To ensure bytes are left for <dataset>[@snapshot] the
+ * <pool> portition is futher limited to 9 bytes. For 2.6.27 and
+ * newer kernels this limit is set to MAXNAMELEN.
+ *
+ * <pool>/<dataset> + <partition> + <newline>
+ * (18) + (1) + (1)
*/
-
+#ifdef HAVE_KOBJ_NAME_LEN
+ if (strlen(path) > 18) {
+#else
if (strlen(path) >= MAXNAMELEN) {
+#endif /* HAVE_KOBJ_NAME_LEN */
if (why)
*why = NAME_ERR_TOOLONG;
return (-1);
* which is the same as MAXNAMELEN used in the kernel.
* If ZPOOL_MAXNAMELEN value is changed, make sure to cleanup all
* places using MAXNAMELEN.
+ *
+ * When HAVE_KOBJ_NAME_LEN is defined the maximum safe kobject name
+ * length is 20 bytes. This 20 bytes is broken down as follows to
+ * provide a maximum safe <pool>/<dataset>[@snapshot] length of only
+ * 18 bytes. To ensure bytes are left for <dataset>[@snapshot] the
+ * <pool> portition is futher limited to 8 bytes. For 2.6.27 and
+ * newer kernels this limit is set to MAXNAMELEN.
+ *
+ * <pool>/<dataset> + <partition> + <newline>
+ * (18) + (1) + (1)
*/
+#ifdef HAVE_KOBJ_NAME_LEN
+ if (strlen(pool) > 8) {
+#else
if (strlen(pool) >= MAXNAMELEN) {
+#endif /* HAVE_KOBJ_NAME_LEN */
if (why)
*why = NAME_ERR_TOOLONG;
return (-1);
return (0);
}
+
+#if defined(_KERNEL) && defined(HAVE_SPL)
+EXPORT_SYMBOL(snapshot_namecheck);
+EXPORT_SYMBOL(pool_namecheck);
+EXPORT_SYMBOL(dataset_namecheck);
+#endif