Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 May 2010 18:31:06 -0700
From:      Garrett Cooper <yanefbsd@gmail.com>
To:        "Marcelo/Porks" <marcelorossi@gmail.com>
Cc:        freebsd-current@freebsd.org, Jeff Roberson <jroberson@jroberson.net>
Subject:   Re: SUJ Changes
Message-ID:  <AANLkTilMRsLGIeI6aSgUZEpHEBN3uMizenB3wPIeMeMB@mail.gmail.com>
In-Reply-To: <AANLkTimwxV7aEVawt3e6oSieyBpuMJ7UFSnz8wdmTARS@mail.gmail.com>
References:  <alpine.BSF.2.00.1005171616390.1398@desktop> <201005270933.42760.jhb@freebsd.org> <AANLkTilQcxW02tav6LS86fUIxlDuaLPdtggmOqj6CDe1@mail.gmail.com> <201005271147.20155.jhb@freebsd.org> <AANLkTimwxV7aEVawt3e6oSieyBpuMJ7UFSnz8wdmTARS@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, May 27, 2010 at 3:44 PM, Marcelo/Porks <marcelorossi@gmail.com> wro=
te:
> On 5/27/10, John Baldwin <jhb@freebsd.org> wrote:
>> On Thursday 27 May 2010 10:13:38 am Marcelo/Porks wrote:
>>> On Thu, May 27, 2010 at 10:33 AM, John Baldwin <jhb@freebsd.org> wrote:
>>> > On Wednesday 26 May 2010 7:56:24 pm Garrett Cooper wrote:
>>> >> On Wed, May 26, 2010 at 3:52 PM, Marcelo/Porks <marcelorossi@gmail.c=
om>
>>> >>
>> wrote:
>>> >> >
>>> >> > Hi guys. I'm not sure if I could call this a problem but I can
>>> >> > disable
>>> >> > SU when SUJ is enabled, so SUJ will remain enabled and SU will be
>>> >> > disabled.
>>> >> >
>>> >> > #tunefs -j enable /dev/device
>>> >> > #tunefs -n disable /dev/device
>>> >> >
>>> >> > I did a patch for sbin/tunefs/tunefs.c that disable SUJ when the u=
ser
>>> >> > disable SU. Maybe this will be useful for some of you.
>>> >> >
>>> >> > Thanks.
>>> >> >
>>> >> >
>>> >> > Index: sbin/tunefs/tunefs.c
>>> >> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> >> > --- sbin/tunefs/tunefs.c =A0 =A0 =A0 =A0(revision 208580)
>>> >> > +++ sbin/tunefs/tunefs.c =A0 =A0 =A0 =A0(working copy)
>>> >> > @@ -460,6 +460,14 @@
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if ((~sblock.fs_fla=
gs & FS_DOSOFTDEP) =3D=3D
>>> > FS_DOSOFTDEP)
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0war=
nx("%s remains unchanged as
>> disabled",
>>> > name);
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0else {
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* a=
lso disable SUJ */
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (=
(sblock.fs_flags & FS_SUJ) =3D=3D
>> FS_SUJ)
>>> > {
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 warnx("soft updates
>>> >> > journaling
>>> >> > will be disabled too");
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 journal_clear();
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 sblock.fs_flags &=3D ~FS_SUJ;
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 sblock.fs_sujfree =3D 0;
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 warnx("remove .sujournal to
>>> >> > reclaim space");
>>> >> > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sbl=
ock.fs_flags &=3D ~FS_DOSOFTDEP;
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0war=
nx("%s cleared", name);
>>> >> > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
>>> >>
>>> > I think that attempting to disable SU if SUJ
>>> > is enabled should just fail with an error message. =A0The sysadmin ca=
n
>>> > then
>>> > choose to disable both SUJ and SU if desired.
>>>
>>> If SU is disabled and One tries to enable SUJ then SU will be
>>> automatically enabled.
>>> So Why not automatically disable SUJ when One tries to disable SU?
>>
>> I'm probably not a big fan of either really. :) =A0For something as rare=
ly
>> done
>> as tunefs I would prefer to err on the side of caution and require the a=
dmin
>> to explicitly specify everything.
>
> Hi John. I agree with you, I do prefer a fail of tunefs in this
> situation. Before of I have posted the first patch I have done another
> one that fails to enable SUJ when SU is disabled and fails to disable
> SU when SUJ is enabled. Now this patch is bellow and attached.
>
> *All the stuff that I will say bellow is based on the attached patch*
>
> The attached patch fails to disable SU when SUJ is enabled.
> And it fails to enable SUJ when SU is disabled.
>
> Earlier I decided to not post the patch because it will cause
> confusion when SU and SUJ is disabled and you try to do something such
> as:
> # tunefs -j enable -n enable /dev/ad2s1d
>
> The flags's processing order is alphabetically, so It will try to
> enable SUJ first (and it will fail) and after it will enable SU. We
> could resolve this by processing '-n' (SU) first and after '-j' (SUJ)
> but this schema will make to fail the following command:
> # tunefs -j disable -n disable /dev/ad2s1d
>
> So I think we could create a function for each flag to be processed
> and the main() calls this functions as necessary (and main() disabled
> the relative flag so the function will not be called again).
>
> But I'm just a curious doing trivial patches, You can talk about this
> with more experience and knowlege.
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3Dpatch=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>
> Index: sbin/tunefs/tunefs.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- sbin/tunefs/tunefs.c =A0 =A0(revision 208584)
> +++ sbin/tunefs/tunefs.c =A0 =A0(working copy)
> @@ -341,16 +341,19 @@
> =A0 =A0if (jflag) {
> =A0 =A0 =A0 =A0name =3D "soft updates journaling";
> =A0 =A0 =A0 =A0if (strcmp(jvalue, "enable") =3D=3D 0) {
> - =A0 =A0 =A0 =A0 =A0 if ((sblock.fs_flags & (FS_DOSOFTDEP | FS_SUJ)) =3D=
=3D
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 (FS_DOSOFTDEP | FS_SUJ)) {
> + =A0 =A0 =A0 =A0 =A0 if ((sblock.fs_flags & FS_SUJ) =3D=3D FS_SUJ) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s remains unchanged as enabled", n=
ame);
> + =A0 =A0 =A0 =A0 =A0 } else if ((sblock.fs_flags & FS_DOSOFTDEP) !=3D
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 FS_DOSOFTDEP) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 warnx("%s cannot be enabled until soft upda=
tes is enabled",
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 name);
> =A0 =A0 =A0 =A0 =A0 =A0} else if (sblock.fs_clean =3D=3D 0) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s cannot be enabled until fsck is =
run",
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0name);
> =A0 =A0 =A0 =A0 =A0 =A0} else if (journal_alloc(Svalue) !=3D 0) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s can not be enabled", name);
> =A0 =A0 =A0 =A0 =A0 =A0} else {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 sblock.fs_flags |=3D FS_DOSOFTDEP | FS_SUJ;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 sblock.fs_flags |=3D FS_SUJ;

I assume FS_DOSOFTDEP is being set elsewhere in the code?

> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s set", name);
> =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0} else if (strcmp(jvalue, "disable") =3D=3D 0) {
> @@ -459,6 +462,9 @@
> =A0 =A0 =A0 =A0} else if (strcmp(nvalue, "disable") =3D=3D 0) {
> =A0 =A0 =A0 =A0 =A0 =A0if ((~sblock.fs_flags & FS_DOSOFTDEP) =3D=3D FS_DO=
SOFTDEP)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s remains unchanged as disabled", =
name);
> + =A0 =A0 =A0 =A0 =A0 else if ((sblock.fs_flags & FS_SUJ) =3D=3D FS_SUJ)
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 warnx("%s cannot be enabled until soft upda=
tes \
> +journaling is disabled", name);

This message doesn't make sense (enable vs disable).

> =A0 =A0 =A0 =A0 =A0 =A0else {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0sblock.fs_flags &=3D ~FS_DOSOFTDEP;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0warnx("%s cleared", name);

Thanks,
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTilMRsLGIeI6aSgUZEpHEBN3uMizenB3wPIeMeMB>