Re: Linux-2.2.2-pre2..

Alexander Viro (viro@math.psu.edu)
Sat, 6 Feb 1999 21:00:51 -0500 (EST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1804928587-918352851=:10407
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sat, 6 Feb 1999, Linus Torvalds wrote:

>
>
> On Sat, 6 Feb 1999, Alexander Viro wrote:
> >
> > Because It's Done That Way (tm). The simplest way to fix it would
> > probably be switching to slabs instead of using raw pages.
>
> It used to use slabs, and memory usage was _horrible_.
>
> > Linus, do you have any objections against it? If it's OK for you
> > I'll roll a patch and submit it.
>
> We had it already for a short moment in the 2.1.x series, and it simply
> didn't work very well. It had all the slab problems with multi-page
> allocations, and inodes also have very hard-to-predict allocation
> lifetimes, so what happened was that when you allocated a lot of inodes,
> the pages were almost never freed back to the page pool, because there was
> often a few inodes holding things locked down anyway.
>
> It's a long time ago, but I essentially reverted it within a few releases
> because _I_ had problems with it (and that's on machines with plenty of
> memory).
>
> > Another question: we still have a race in rename() on UNIX
> > filsystems (d_invalidate() stuff).
>
> Remind me..

If rename() is going to overwrite an existing directory it should check
that it's empty and (obvious race prevention) nobody else uses it.
Current code does shrink_dcache_parent() on the victim and then checks
d_count. It is not enough, since we are leaving the victim hashed and
anybody can grab it while we are checking emptiness and start to mess
with it.

Proposed fix: instead of
if (new_dentry->d_count>1)
shrink_dcache_parent(new_dentry);
if (new_dentry->d_count>1)
fail with -EBUSY
check emptiness
...
...
...
d_move(old_dentry,new_dentry);
do
if (d_invalidate(new_dentry)<0)
fail with -EBUSY
need_rehash=1;
check emptiness
...
...
...
if (need_rehash)
d_rehash(new_dentry);
d_move(old_dentry,new_dentry);

That is, try to unhash the victim, say EBUSY if failed, remember to
rehash it before d_move(), do emptiness check (we are safe now), do the
rest of rename, rehash the victim if needed and do d_move().
This should be done for affs, ext2, minix, sysvfs, ufs and coda.
vfat already does exactly that. So there... It's about 6-7 changed lines
in each fs. I'm attaching the patch against 2.2.2-pre2. Apply if you think
that it's suitable for 2.2.early. Race is real, so...
Cheers,
Al

---559023410-1804928587-918352851=:10407
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=rename-patch
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95.990206210051.10407B@weyl.math.psu.edu>
Content-Description:

LS0tIGxpbnV4LTIuMi4yLXByZTIvZnMvYWZmcy9uYW1laS5jCVRodSBEZWMg
MjQgMDQ6MzY6NDQgMTk5OA0KKysrIGxpbnV4LmJpcmQvZnMvYWZmcy9uYW1l
aS5jCVNhdCBGZWIgIDYgMjA6MTc6MTggMTk5OQ0KQEAgLTUyOCw2ICs1Mjgs
NyBAQA0KIAl1bnNpZ25lZCBsb25nCQkgb2xkX2lubzsNCiAJdW5zaWduZWQg
bG9uZwkJIG5ld19pbm87DQogCWludAkJCSByZXR2YWw7DQorCWludAkJCSBu
ZWVkX3JlaGFzaCA9IDA7DQogDQogCXByX2RlYnVnKCJBRkZTOiByZW5hbWUo
b2xkPSVsdSxcIiUqc1wiIChpbm9kZT0lcCkgdG8gbmV3PSVsdSxcIiUqc1wi
IChpbm9kZT0lcCkpXG4iLA0KIAkJIG9sZF9kaXItPmlfaW5vLG9sZF9kZW50
cnktPmRfbmFtZS5sZW4sb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsb2xkX2lu
b2RlLA0KQEAgLTU2NCwxMSArNTY1LDEwIEBADQogCQlpZiAoaXNfc3ViZGly
KG5ld19kZW50cnksIG9sZF9kZW50cnkpKQ0KIAkJCWdvdG8gZW5kX3JlbmFt
ZTsNCiAJCWlmIChuZXdfaW5vZGUpIHsNCi0JCQlpZiAobmV3X2RlbnRyeS0+
ZF9jb3VudCA+IDEpDQotCQkJCXNocmlua19kY2FjaGVfcGFyZW50KG5ld19k
ZW50cnkpOw0KIAkJCXJldHZhbCA9IC1FQlVTWTsNCi0JCQlpZiAobmV3X2Rl
bnRyeS0+ZF9jb3VudCA+IDEpDQorCQkJaWYgKGRfaW52YWxpZGF0ZShuZXdf
ZGVudHJ5KTwwKQ0KIAkJCQlnb3RvIGVuZF9yZW5hbWU7DQorCQkJbmVlZF9y
ZWhhc2ggPSAxOw0KIAkJCXJldHZhbCA9IC1FTk9URU1QVFk7DQogCQkJaWYg
KCFlbXB0eV9kaXIobmV3X2JoLEFGRlNfSTJIU0laRShuZXdfaW5vZGUpKSkN
CiAJCQkJZ290byBlbmRfcmVuYW1lOw0KQEAgLTYwNCw2ICs2MDQsOCBAQA0K
IAltYXJrX2lub2RlX2RpcnR5KG5ld19kaXIpOw0KIAltYXJrX2lub2RlX2Rp
cnR5KG9sZF9kaXIpOw0KIAltYXJrX2J1ZmZlcl9kaXJ0eShvbGRfYmgsMSk7
DQorCWlmIChuZWVkX3JlaGFzaCkNCisJCWRfcmVoYXNoKG5ld19kZW50cnkp
Ow0KIAlkX21vdmUob2xkX2RlbnRyeSxuZXdfZGVudHJ5KTsNCiAJDQogZW5k
X3JlbmFtZToNCi0tLSBsaW51eC0yLjIuMi1wcmUyL2ZzL2NvZGEvZGlyLmMJ
VHVlIEphbiAyNiAwMToxNjo1OSAxOTk5DQorKysgbGludXguYmlyZC9mcy9j
b2RhL2Rpci5jCVNhdCBGZWIgIDYgMjA6MTk6MDQgMTk5OQ0KQEAgLTU0OSw2
ICs1NDksNyBAQA0KIAlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19k
ZW50cnktPmRfaW5vZGU7DQogICAgICAgICBzdHJ1Y3QgY29kYV9pbm9kZV9p
bmZvICpuZXdfY25wLCAqb2xkX2NucDsNCiAgICAgICAgIGludCBlcnJvcjsN
CisJaW50IG5lZWRfcmVoYXNoID0gMDsNCiANCiAJRU5UUlk7DQogCWNvZGFf
dmZzX3N0YXQucmVuYW1lKys7DQpAQCAtNTcwLDE0ICs1NzEsOSBAQA0KIA0K
IAkvKiBtYWtlIHN1cmUgdGFyZ2V0IGlzIG5vdCBpbiB1c2UgKi8NCiAJaWYg
KG5ld19pbm9kZSAmJiBTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkgeyAN
Ci0JCS8qDQotICAgICAgICAgICAgICAgICAqIFBydW5lIGFueSBjaGlsZHJl
biBiZWZvcmUgdGVzdGluZyBmb3IgYnVzeS4NCi0gICAgICAgICAgICAgICAg
ICovDQotICAgICAgICAgICAgICAgIGlmIChuZXdfZGVudHJ5LT5kX2NvdW50
ID4gMSkNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaHJpbmtfZGNhY2hl
X3BhcmVudChuZXdfZGVudHJ5KTsNCi0NCi0gICAgICAgICAgICAgICAgaWYg
KG5ld19kZW50cnktPmRfY291bnQgPiAxKQ0KKwkJaWYgKGRfaW52YWxpZGF0
ZShuZXdfZGVudHJ5KTwwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAtRUJVU1k7DQorCQluZWVkX3JlaGFzaCA9IDE7DQogICAgICAgICB9
DQogDQogCS8qIHRoZSBDIGxpYnJhcnkgd2lsbCBkbyB1bmxpbmsvY3JlYXRl
IGV0YyAqLw0KQEAgLTU5OSw2ICs1OTUsOCBAQA0KIAljb2RhX2ZsYWdfaW5v
ZGUobmV3X2RpciwgQ19WQVRUUik7DQogDQogCUNERUJVRyhEX0lOT0RFLCAi
cmVzdWx0ICVkXG4iLCBlcnJvcik7IA0KKwlpZiAobmVlZF9yZWhhc2gpDQor
CQlkX3JlaGFzaChuZXdfZGVudHJ5KTsNCiAJZF9tb3ZlKG9sZF9kZW50cnks
IG5ld19kZW50cnkpOw0KIA0KIAlFWElUOw0KLS0tIGxpbnV4LTIuMi4yLXBy
ZTIvZnMvZXh0Mi9uYW1laS5jCVRodSBEZWMgMjQgMDQ6MzY6NDYgMTk5OA0K
KysrIGxpbnV4LmJpcmQvZnMvZXh0Mi9uYW1laS5jCVNhdCBGZWIgIDYgMjA6
MjE6MDIgMTk5OQ0KQEAgLTg2OCw2ICs4NjgsNyBAQA0KIAlzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiBvbGRfYmgsICogbmV3X2JoLCAqIGRpcl9iaDsNCiAJc3Ry
dWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBvbGRfZGUsICogbmV3X2RlOw0KIAlp
bnQgcmV0dmFsOw0KKwlpbnQgbmVlZF9yZWhhc2ggPSAwOw0KIA0KIAlvbGRf
YmggPSBuZXdfYmggPSBkaXJfYmggPSBOVUxMOw0KIAlyZXR2YWwgPSAtRU5B
TUVUT09MT05HOw0KQEAgLTkwNSwxMiArOTA2LDEwIEBADQogCQlpZiAoaXNf
c3ViZGlyKG5ld19kZW50cnksIG9sZF9kZW50cnkpKQ0KIAkJCWdvdG8gZW5k
X3JlbmFtZTsNCiAJCWlmIChuZXdfaW5vZGUpIHsNCi0JCQkvKiBQcnVuZSBh
bnkgY2hpbGRyZW4gYmVmb3JlIHRlc3RpbmcgZm9yIGJ1c3kgKi8NCi0JCQlp
ZiAobmV3X2RlbnRyeS0+ZF9jb3VudCA+IDEpDQotCQkJCXNocmlua19kY2Fj
aGVfcGFyZW50KG5ld19kZW50cnkpOw0KIAkJCXJldHZhbCA9IC1FQlVTWTsN
Ci0JCQlpZiAobmV3X2RlbnRyeS0+ZF9jb3VudCA+IDEpDQorCQkJaWYgKGRf
aW52YWxpZGF0ZShuZXdfZGVudHJ5KTwwKQ0KIAkJCQlnb3RvIGVuZF9yZW5h
bWU7DQorCQkJbmVlZF9yZWhhc2ggPSAxOw0KIAkJCXJldHZhbCA9IC1FTk9U
RU1QVFk7DQogCQkJaWYgKCFlbXB0eV9kaXIgKG5ld19pbm9kZSkpDQogCQkJ
CWdvdG8gZW5kX3JlbmFtZTsNCkBAIC05NzgsNiArOTc3LDggQEANCiAJfQ0K
IA0KIAkvKiBVcGRhdGUgdGhlIGRjYWNoZSAqLw0KKwlpZiAobmVlZF9yZWhh
c2gpDQorCQlkX3JlaGFzaChuZXdfZGVudHJ5KTsNCiAJZF9tb3ZlKG9sZF9k
ZW50cnksIG5ld19kZW50cnkpOw0KIAlyZXR2YWwgPSAwOw0KIA0KLS0tIGxp
bnV4LTIuMi4yLXByZTIvZnMvbWluaXgvbmFtZWkuYwlUaHUgRGVjIDI0IDA0
OjM2OjQ2IDE5OTgNCisrKyBsaW51eC5iaXJkL2ZzL21pbml4L25hbWVpLmMJ
U2F0IEZlYiAgNiAyMDoyMjozNSAxOTk5DQpAQCAtNjEyLDYgKzYxMiw3IEBA
DQogCXN0cnVjdCBtaW5peF9kaXJfZW50cnkgKiBvbGRfZGUsICogbmV3X2Rl
Ow0KIAlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqIGluZm87DQogCWludCByZXR2
YWw7DQorCWludCBuZWVkX3JlaGFzaCA9IDA7DQogDQogCWluZm8gPSAmb2xk
X2Rpci0+aV9zYi0+dS5taW5peF9zYjsNCiAJZ290byBzdGFydF91cDsNCkBA
IC02NDksMTUgKzY1MCwxMyBAQA0KIAkJaWYgKGlzX3N1YmRpcihuZXdfZGVu
dHJ5LCBvbGRfZGVudHJ5KSkNCiAJCQlnb3RvIGVuZF9yZW5hbWU7DQogCQlp
ZiAobmV3X2lub2RlKSB7DQotCQkJLyogUHJ1bmUgYW55IGNoaWxkcmVuIGJl
Zm9yZSB0ZXN0aW5nIGZvciBidXN5ICovDQotCQkJaWYgKG5ld19kZW50cnkt
PmRfY291bnQgPiAxKQ0KLQkJCQlzaHJpbmtfZGNhY2hlX3BhcmVudChuZXdf
ZGVudHJ5KTsNCiAJCQlyZXR2YWwgPSAtRUJVU1k7DQotCQkJaWYgKG5ld19k
ZW50cnktPmRfY291bnQgPiAxKQ0KKwkJCWlmIChkX2ludmFsaWRhdGUobmV3
X2RlbnRyeSk8MCkNCisJCQkJZ290byBlbmRfcmVuYW1lOw0KKwkJCW5lZWRf
cmVoYXNoID0gMTsNCiAJCQlyZXR2YWwgPSAtRU5PVEVNUFRZOw0KIAkJCWlm
ICghZW1wdHlfZGlyKG5ld19pbm9kZSkpDQogCQkJCWdvdG8gZW5kX3JlbmFt
ZTsNCi0JCQlyZXR2YWwgPSAtRUJVU1k7DQogCQl9DQogCQlyZXR2YWwgPSAt
RUlPOw0KIAkJZGlyX2JoID0gbWluaXhfYnJlYWQob2xkX2lub2RlLDAsMCk7
DQpAQCAtNzE0LDYgKzcxMyw4IEBADQogCQl9DQogCX0NCiAJLyogVXBkYXRl
IHRoZSBkY2FjaGUgKi8NCisJaWYgKG5lZWRfcmVoYXNoKQ0KKwkJZF9yZWhh
c2gobmV3X2RlbnRyeSk7DQogCWRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVu
dHJ5KTsNCiAJcmV0dmFsID0gMDsNCiBlbmRfcmVuYW1lOg0KLS0tIGxpbnV4
LTIuMi4yLXByZTIvZnMvc3lzdi9uYW1laS5jCVRodSBEZWMgMzEgMjA6MDY6
MDEgMTk5OA0KKysrIGxpbnV4LmJpcmQvZnMvc3lzdi9uYW1laS5jCVNhdCBG
ZWIgIDYgMjA6MjQ6MDYgMTk5OQ0KQEAgLTYwMCw2ICs2MDAsNyBAQA0KIAlz
dHJ1Y3QgYnVmZmVyX2hlYWQgKiBvbGRfYmgsICogbmV3X2JoLCAqIGRpcl9i
aDsNCiAJc3RydWN0IHN5c3ZfZGlyX2VudHJ5ICogb2xkX2RlLCAqIG5ld19k
ZTsNCiAJaW50IHJldHZhbDsNCisJaW50IG5lZWRfcmVoYXNoID0gMDsNCiAN
CiAJZ290byBzdGFydF91cDsNCiB0cnlfYWdhaW46DQpAQCAtNjM2LDExICs2
MzcsMTAgQEANCiAJCWlmIChpc19zdWJkaXIobmV3X2RlbnRyeSwgb2xkX2Rl
bnRyeSkpDQogCQkJZ290byBlbmRfcmVuYW1lOw0KIAkJaWYgKG5ld19pbm9k
ZSkgew0KLQkJCWlmIChuZXdfZGVudHJ5LT5kX2NvdW50ID4gMSkNCi0JCQkJ
c2hyaW5rX2RjYWNoZV9wYXJlbnQobmV3X2RlbnRyeSk7DQogCQkJcmV0dmFs
ID0gLUVCVVNZOw0KLQkJCWlmIChuZXdfZGVudHJ5LT5kX2NvdW50ID4gMSkN
CisJCQlpZiAoZF9pbnZhbGlkYXRlKG5ld19kZW50cnkpPDApDQogCQkJCWdv
dG8gZW5kX3JlbmFtZTsNCisJCQluZWVkX3JlaGFzaCA9IDE7DQogCQkJcmV0
dmFsID0gLUVOT1RFTVBUWTsNCiAJCQlpZiAoIWVtcHR5X2RpcihuZXdfaW5v
ZGUpKQ0KIAkJCQlnb3RvIGVuZF9yZW5hbWU7DQpAQCAtNjk1LDYgKzY5NSw4
IEBADQogCQkJbWFya19pbm9kZV9kaXJ0eShuZXdfZGlyKTsNCiAJCX0NCiAJ
fQ0KKwlpZiAobmVlZF9yZWhhc2gpDQorCQlkX3JlaGFzaChuZXdfZGVudHJ5
KTsNCiAJZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpOw0KIAlyZXR2
YWwgPSAwOw0KIGVuZF9yZW5hbWU6DQotLS0gbGludXgtMi4yLjItcHJlMi9m
cy91ZnMvbmFtZWkuYwlTYXQgSmFuIDIzIDA0OjU0OjUzIDE5OTkNCisrKyBs
aW51eC5iaXJkL2ZzL3Vmcy9uYW1laS5jCVNhdCBGZWIgIDYgMjA6MjU6NDIg
MTk5OQ0KQEAgLTkzMSw2ICs5MzEsNyBAQA0KIAlzdHJ1Y3QgdWZzX2Rpcl9l
bnRyeSAqIG9sZF9kZSwgKiBuZXdfZGU7DQogCWludCByZXR2YWw7DQogCXVu
c2lnbmVkIGZsYWdzLCBzd2FiOw0KKwlpbnQgbmVlZF9yZWhhc2ggPSAwOw0K
IAkNCiAJc2IgPSBvbGRfZGlyLT5pX3NiOw0KIAlmbGFncyA9IHNiLT51LnVm
c19zYi5zX2ZsYWdzOw0KQEAgLTk3NSwxMiArOTc2LDEwIEBADQogCQlpZiAo
aXNfc3ViZGlyKG5ld19kZW50cnksIG9sZF9kZW50cnkpKQ0KIAkJCWdvdG8g
ZW5kX3JlbmFtZTsNCiAJCWlmIChuZXdfaW5vZGUpIHsNCi0JCQkvKiBQcnVu
ZSBhbnkgY2hpbGRyZW4gYmVmb3JlIHRlc3RpbmcgZm9yIGJ1c3kgKi8NCi0J
CQlpZiAobmV3X2RlbnRyeS0+ZF9jb3VudCA+IDEpDQotCQkJCXNocmlua19k
Y2FjaGVfcGFyZW50KG5ld19kZW50cnkpOw0KIAkJCXJldHZhbCA9IC1FQlVT
WTsNCi0JCQlpZiAobmV3X2RlbnRyeS0+ZF9jb3VudCA+IDEpDQorCQkJaWYg
KGRfaW52YWxpZGF0ZShuZXdfZGVudHJ5KTwwKQ0KIAkJCQlnb3RvIGVuZF9y
ZW5hbWU7DQorCQkJbmVlZF9yZWhhc2ggPSAxOw0KIAkJCXJldHZhbCA9IC1F
Tk9URU1QVFk7DQogCQkJaWYgKCF1ZnNfZW1wdHlfZGlyIChuZXdfaW5vZGUp
KQ0KIAkJCQlnb3RvIGVuZF9yZW5hbWU7DQpAQCAtMTA0Myw2ICsxMDQyLDgg
QEANCiAJfQ0KIA0KIAkvKiBVcGRhdGUgdGhlIGRjYWNoZSAqLw0KKwlpZiAo
bmVlZF9yZWhhc2gpDQorCQlkX3JlaGFzaChuZXdfZGVudHJ5KTsNCiAJZF9t
b3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpOw0KIAlyZXR2YWwgPSAwOw0K
IGVuZF9yZW5hbWU6DQo=
---559023410-1804928587-918352851=:10407--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/