Re: attempt to re-implement sillyrename for NFS in 2.1.*

Claus-Justus Heine (Heine@physik.rwth-aachen.de)
23 Aug 1997 23:05:17 +0200


--pgp-sign-Multipart_Sat_Aug_23_23:04:41_1997-1
Content-Type: multipart/mixed;
boundary="Multipart_Sat_Aug_23_23:04:41_1997-1"
Content-Transfer-Encoding: 7bit

--Multipart_Sat_Aug_23_23:04:41_1997-1
Content-Type: text/plain; charset=US-ASCII

> 'inode->i_op->unlink()':
> - look at "dentry->d_count": if it is > 1 we need to sillyrename,
> because somebody has the file open still so we can't delete it
> at the server.
> - if dentry->d_count == 1, delete the file.
>
> 'dentry->d_op->delete()':
> - look if we are silly-renamed (use "dentry->d_flag" for this, it's
> usable for filesystem specific things). If so, do the actual NFS
> server delete.
>

I think the following patch should be acceptable. It doesn't use the
inode stuff any longer (well, the temp files still have the hex
representation of i_ino as a part of their name, but that's cosmetic; it
doesn't break the code to simply delete the two lines that are
responsible for this).

Instead, it uses the dcache stuff only:

a "silly renamed" file is created if "d_count > 1". A flag
"DCACHE_NFSFS_RENAMED" is set in dentry->d_flags to mark this dentry
as being renamed. The name of the "silly" file is

".nfs#i_ino#jiffies"

where "#i_ino" is the hex representation of
dentry->d_inode->i_ino. This can be deleted. It is here for cosmetic
reasons ONLY.

The #jiffies refers to the hex representation of the value that
"jiffies" had at the time the temp file was created. Ok, that name
isn't really unique, but: if we really should step into the unlikely
case that there already exists such a file, then the "sillyrename()"
function simply retries: it calls nfs_lookup() which definitely will
sleep for some jiffies and tries to create a new temp name with the
new jiffies value.

This should be safe enough.

This second attempt of mine to re-implement the sillyrename() stuff
for 2.1.* fixes a serious bug in my previous patch:

The previous patch did NOT compute the hash value of the renamed
file. This was evil as this resulted in cached lookups to fail; and
into allocation of new dentry instances for the already existing
dentry of the renamed file. I struggled quite a while to figure out
why the "dentry->d_count > 1" check seemed to be broken. But that was
the reason.

In order to remove the "silly renamed" files after the last
application has closed its file descriptor a new component
"dentry->d_op->d_delete" has been introduced. This follows a
suggestion by Linus and, hey, this was a pretty good idea. Thanks
Linus!

The new "d_delete" function is called by dput() when the d_count
reaches zero. It is called before doing any other stuff (i.e. before
the d_inode is being iput()) and thus can be used perfectly to delete
those "silly" ".nfs..." files.

I have deleted the now unnecessary components in the nfs inode struct
that were needed for the 2.0.* silly rename stuff. We really don't
need to fiddle with the inode code any more for silly rename.

Also, there is no need to remove the silly renamed file from the hash
queues of their parent dirs any more. Doing that would be even evil.

My current implementation still denies removal or renaming of those
special "silly renamed" files, returning an -EBUSY error. This could
be changed. But I regard this rather as a feature than a bug.

One last remark: the inode based implementation of the silly rename
feature needs at most one ".nfs..." temp file for each directory for a
given inode. The dcache based implementation creates a new ".nfs..."
temp file whenever a busy file (i.e. d_count > 1) is unlinked or moved
to another directory. While this creates more links and name instances
of the same inode, it isn't worth the effort to eliminate those
"extra" name-instances of those "silly" inodes. IMHO.

Cheers

Claus

--Multipart_Sat_Aug_23_23:04:41_1997-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="linux-2.1.51.silly-2.dif"
Content-Transfer-Encoding: base64

LS0tIC91c3Ivc3JjL2xpbnV4LTIuMS41MS9mcy9kY2FjaGUuYwlUaHUgQXVnIDIxIDE5OjE5
OjI3IDE5OTcKKysrIGxpbnV4LTIuMS41MS1uZnMtc3dhcC9mcy9kY2FjaGUuYwlTYXQgQXVn
IDIzIDIwOjI4OjA5IDE5OTcKQEAgLTcxLDEyICs3MSwxNiBAQAogCQl9CiAJCWRlbnRyeS0+
ZF9jb3VudCA9IGNvdW50OwogCQlpZiAoIWNvdW50KSB7CisJCQlpZiAoZGVudHJ5LT5kX29w
ICYmIGRlbnRyeS0+ZF9vcC0+ZF9kZWxldGUpIHsKKwkJCQkoKmRlbnRyeS0+ZF9vcC0+ZF9k
ZWxldGUpKGRlbnRyeSk7CisJCQl9CiAJCQlsaXN0X2RlbCgmZGVudHJ5LT5kX2xydSk7CiAJ
CQlpZiAobGlzdF9lbXB0eSgmZGVudHJ5LT5kX2hhc2gpKSB7CiAJCQkJc3RydWN0IGlub2Rl
ICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAkJCQlzdHJ1Y3QgZGVudHJ5ICogcGFyZW50
OwogCQkJCWlmIChpbm9kZSkgewogCQkJCQlsaXN0X2RlbCgmZGVudHJ5LT5kX2FsaWFzKTsK
KwkJCQkJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKIAkJCQkJaXB1dChpbm9kZSk7CiAJCQkJ
fQogCQkJCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7Ci0tLSAvdXNyL3NyYy9saW51eC0y
LjEuNTEvZnMvbmZzL2Rpci5jCVRodSBBdWcgMjEgMTk6MTk6MjggMTk5NworKysgbGludXgt
Mi4xLjUxLW5mcy1zd2FwL2ZzL25mcy9kaXIuYwlTYXQgQXVnIDIzIDIwOjUzOjEzIDE5OTcK
QEAgLTcsNiArNywxMyBAQAogICoKICAqIDEwIEFwciAxOTk2CUFkZGVkIHNpbGx5IHJlbmFt
ZSBmb3IgdW5saW5rCS0tb2tpcgogICogMjggU2VwIDE5OTYJSW1wcm92ZWQgZGlyZWN0b3J5
IGNhY2hlIC0tb2tpcgorICogMjMgQXVnIDE5OTcgIENsYXVzIEhlaW5lIGNsYXVzQG1vbW8u
bWF0aC5yd3RoLWFhY2hlbi5kZSAKKyAqICAgICAgICAgICAgICBSZS1pbXBsZW1lbnRlZCBz
aWxseSByZW5hbWUgZm9yIHVubGluaywgbmV3bHkgaW1wbGVtZW50ZWQKKyAqICAgICAgICAg
ICAgICBzaWxseSByZW5hbWUgZm9yIG5mc19yZW5hbWUoKSBmb2xsb3dpbmcgdGhlIHN1Z2dl
c3Rpb25zCisgKiAgICAgICAgICAgICAgb2YgT2xhZiBLaXJjaCAob2tpcikgZm91bmQgaW4g
dGhpcyBmaWxlLgorICogICAgICAgICAgICAgIEZvbGxvd2luZyBMaW51cyBjb21tZW50cyBv
biBteSBvcmlnaW5hbCBoYWNrLCB0aGlzIHZlcnNpb24KKyAqICAgICAgICAgICAgICBkZXBl
bmRzIG9ubHkgb24gdGhlIGRjYWNoZSBzdHVmZiBhbmQgZG9lc24ndCB0b3VjaCB0aGUgaW5v
ZGUKKyAqICAgICAgICAgICAgICBsYXllciAoaXB1dCgpIGFuZCBmcmllbmRzKS4KICAqLwog
CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTM0OSwxMCArMzU2LDEzIEBACiAJcmV0
dXJuIHRpbWUgPCBtYXg7CiB9CiAKK3N0YXRpYyB2b2lkIG5mc19zaWxseV9kZWxldGUoc3Ry
dWN0IGRlbnRyeSAqKTsKKwogc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNf
ZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJbmZzX2xvb2t1cF9yZXZhbGlkYXRlLAogCTAsCQkJ
LyogZF9oYXNoICovCiAJMCwJCQkvKiBkX2NvbXBhcmUgKi8KKwluZnNfc2lsbHlfZGVsZXRl
LAogfTsKIAogc3RhdGljIGludCBuZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1
Y3QgZGVudHJ5ICogZGVudHJ5KQpAQCAtMzc4LDcgKzM4OCw2IEBACiAKIAlpbm9kZSA9IE5V
TEw7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IC1FTk9FTlQ7CiAJCWlub2RlID0gbmZz
X2ZoZ2V0KGRpci0+aV9zYiwgJmZoYW5kbGUsICZmYXR0cik7CiAJCWlmICghaW5vZGUpCiAJ
CQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTUzMCw5ICs1MzksMTUzIEBACiAJcmV0dXJuIDA7CiB9
CiAKLS8qCi0gKiBXZSBzaG91bGQgZG8gc2lsbHktcmVuYW1lIGhlcmUsIGJ1dCBJJ20gdG9v
IGxhenkgdG8gZml4Ci0gKiB1cCB0aGUgZGlyZWN0b3J5IGVudHJ5IGltcGxpY2F0aW9ucyBv
ZiBpdC4uCisKKy8qICBOb3RlOiB3ZSBjb3B5IHRoZSBjb2RlIGZyb20gbG9va3VwX2RlbnRy
eSgpIGhlcmUsIG9ubHk6IHdlIGhhdmUgdG8KKyAqICBvbWl0IHRoZSBkaXJlY3RvcnkgbG9j
ay4gV2UgYXJlIGFscmVhZHkgdGhlIG93bmVyIG9mIHRoZSBsb2NrIHdoZW4KKyAqICB3ZSBy
ZWFjaCBoZXJlLiBBbmQgImRvd24oJmRpci0+aV9zZW0pIiB3b3VsZCBtYWtlIHVzIHNsZWVw
IGZvcmV2ZXIKKyAqICAoJ2NhdXNlIFdFIGhhdmUgdGhlIGxvY2spCisgKiAKKyAqICBWRVJZ
IElNUE9SVEFOVDogY2FsY3VsYXRlIHRoZSBoYXNoIGZvciB0aGlzIGRlbnRyeSEhISEhISEh
CisgKiAgT3RoZXJ3aXNlIHRoZSBjYWNoZWQgbG9va3VwIERFRklOSVRFTFkgV0lMTCBmYWls
LiBBbmQgYSBuZXcgZGVudHJ5CisgKiAgaXMgY3JlYXRlZC4gV2l0aG91dCB0aGUgRENBQ0hF
X05GU0ZTX1JFTkFNRUQgZmxhZy4gQW5kIHdpdGggZF9jb3VudAorICogID09IDEuIEFuZCB0
cm91YmxlLgorICoKKyAqICBDb25jZXJuaW5nIG15IGNob2ljZSBvZiB0aGUgdGVtcCBuYW1l
OiBpdCBpcyBqdXN0IG5pY2UgdG8gaGF2ZQorICogIGlfaW5vIHBhcnQgb2YgdGhlIHRlbXAg
bmFtZSwgYXMgdGhpcyBvZmZlcnMgYW5vdGhlciBjaGVjayB3aGV0aGVyCisgKiAgc29tZWJv
ZHkgYXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSAic2lsbHkgcmVuYW1lZCIgZGVudHJ5CisgKiAg
aXRzZWxmLiBXaGljaCBpcyBzb21ldGhpbmcgdGhhdCBJIGNvbnNpZGVyIGV2aWwuIFlvdXIg
b3BpbmlvbiBtYXkKKyAqICB2YXJ5LgorICogIEJVVDoKKyAqICBOb3cgdGhhdCBJIGNvbXB1
dGUgdGhlIGhhc2ggdmFsdWUgcmlnaHQsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBzaW1w
bHkKKyAqICBjaGVjayBmb3IgdGhlIERDQUNIRV9ORlNGU19SRU5BTUVEIGZsYWcgaW4gZGVu
dHJ5LT5kX2ZsYWcgaW5zdGVhZCBvZgorICogIGRvaW5nIHRoZSBzdHJpbmcgY29tcGFyZS4K
KyAqICBXSElDSCBNRUFOUzoKKyAqICBUaGlzIG9mZmVycyB0aGUgb3Bwb3J0dW5pdHkgdG8g
c2hvcnRlbiB0aGUgdGVtcCBuYW1lLiBDdXJyZW50bHksIEkgdXNlCisgKiAgdGhlIGhleCBy
ZXByZXNlbnRhdGlvbiBvZiBpX2lubyArIHRoZSBoZXggdmFsdWUgb2YgamlmZmllcy4gVGhp
cworICogIHN1bXMgdXAgdG8gYXMgbXVjaCBhcyAzNiBjaGFyYWN0ZXJzIGZvciBhIDY0IGJp
dCBtYWNoaW5lLCBhbmQgbmVlZHMKKyAqICAyMCBjaGFycyBvbiBhIDMyIGJpdCBtYWNoaW5l
LiBIYXZlIGEgbG9vayBhdCBqaWZmaWVzaXplIGV0Yy4KKyAqICBRVUlOVEVTU0VOQ0UKKyAq
ICBUaGUgdXNlIG9mIGlfaW5vIGlzIHNpbXBseSBjb3NtZXRpYy4gQWxsIHdlIG5lZWQgaXMg
YSB1bmlxdWUgdGVtcAorICogIGZpbGUgbmFtZSBmb3IgdGhlIC5uZnMgZmlsZXMuIFRoZSBo
ZXggcmVwcmVzZW50YXRpb24gb2YgImppZmZpZXMiCisgKiAgc2VlbWVkIHRvIGJlIGFkZXF1
YXRlLiBBbmQgYXMgd2UgcmV0cnkgaW4gY2FzZSBzdWNoIGEgZmlsZSBhbHJlYWR5CisgKiAg
ZXhpc3RzIHdlIGFyZSBndWFyYW50ZWVkIHRvIHN1Y2NlZCAoYWZ0ZXIgc29tZSBqaWZmaWVz
IGhhdmUgcGFzc2VkCisgKiAgYnkgOikKKyAqLworCitzdGF0aWMKK3N0cnVjdCBkZW50cnkg
Km5mc19zaWxseV9sb29rdXAoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjaGFyICpzaWxseSwg
aW50IHNsZW4pCit7CisJc3RydWN0IHFzdHIgICAgc3FzdHI7CisJc3RydWN0IGRlbnRyeSAq
c2RlbnRyeTsKKwlpbnQgaSwgZXJyb3I7CisKKwlzcXN0ci5uYW1lID0gc2lsbHk7CisJc3Fz
dHIubGVuICA9IHNsZW47CisJc3FzdHIuaGFzaCA9IGluaXRfbmFtZV9oYXNoKCk7CisJZm9y
IChpPSAwOyBpIDwgc2xlbjsgaSsrKQorCQlzcXN0ci5oYXNoID0gcGFydGlhbF9uYW1lX2hh
c2goc2lsbHlbaV0sIHNxc3RyLmhhc2gpOworCXNxc3RyLmhhc2ggPSBlbmRfbmFtZV9oYXNo
KHNxc3RyLmhhc2gpOworCXNkZW50cnkgPSBkX2xvb2t1cChwYXJlbnQsICZzcXN0cik7CisJ
aWYgKCFzZGVudHJ5KSB7CisJCXNkZW50cnkgPSBkX2FsbG9jKHBhcmVudCwgJnNxc3RyKTsK
KwkJaWYgKHNkZW50cnkgPT0gTlVMTCkKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwor
CQllcnJvciA9IG5mc19sb29rdXAocGFyZW50LT5kX2lub2RlLCBzZGVudHJ5KTsKKwkJaWYg
KGVycm9yKSB7CisJCQlkcHV0KHNkZW50cnkpOworCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3Ip
OworCQl9CisJfQorCXJldHVybiBzZGVudHJ5OworfQorCitzdGF0aWMgaW50IG5mc19zaWxs
eXJlbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorewor
CWNvbnN0IGludCAgICAgIGlfaW5vc2l6ZSAgPSBzaXplb2YoZGlyLT5pX2lubykqMjsKKwlj
b25zdCBpbnQgICAgICBqaWZmaWVzaXplID0gc2l6ZW9mKGppZmZpZXMpKjI7CisJY29uc3Qg
aW50ICAgICAgc2xlbiAgICAgICA9IHN0cmxlbigiLm5mcyIpICsgaV9pbm9zaXplICsgamlm
Zmllc2l6ZTsKKwljaGFyICAgICAgICAgICBzaWxseVtzbGVuKzFdOworCWludCAgICAgICAg
ICAgIGVycm9yOworCXN0cnVjdCBkZW50cnkgKnNkZW50cnk7CisKKwlpZiAoZGVudHJ5LT5k
X2NvdW50ID09IDEpIHsKKwkJcmV0dXJuIC1FSU87ICAvKiBObyBuZWVkIHRvIHNpbGx5IHJl
bmFtZS4gKi8KKwl9CisKKwlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX05GU0ZTX1JF
TkFNRUQpIHsKKwkJcmV0dXJuIC1FQlVTWTsgLyogZG9uJ3QgYWxsb3cgdG8gdW5saW5rIHNp
bGx5IGlub2RlIC0tIG5vcGUsCisJCQkJKiB0aGluayBhIGJpdDogc2lsbHkgREVOVFJZLCBO
T1QgaW5vZGUgLS0KKwkJCQkqIGl0c2VsZgorCQkJCSovCisJfQorCisJc3ByaW50ZihzaWxs
eSwgIi5uZnMlKi4qbHgiLAorCQlpX2lub3NpemUsIGlfaW5vc2l6ZSwgZGVudHJ5LT5kX2lu
b2RlLT5pX2lubyk7CisjaWYgMAorCS8qIG5vdCBuZWVkZWQgKi8KKwlpZiAoZGVudHJ5LT5k
X25hbWUubGVuID09IHNsZW4gJiYKKwkgICAgIXN0cm5jbXAoZGVudHJ5LT5kX25hbWUubmFt
ZSwgc2lsbHksIHNsZW4gLSBqaWZmaWVzaXplKSkgeworCQlyZXR1cm4gLUVCVVNZOyAvKiBk
b24ndCBhbGxvdyB0byB1bmxpbmsgc2lsbHlfaW5vZGUgaXRzZWxmICovCisJfQorI2VuZGlm
CisKKwlzZGVudHJ5ID0gTlVMTDsKKwlkbyB7CisJCWNoYXIgKnN1ZmZpeCA9IHNpbGx5ICsg
c2xlbiAtIGppZmZpZXNpemU7CisKKwkJZHB1dChzZGVudHJ5KTsKKwkJc3ByaW50ZihzdWZm
aXgsICIlKi4qbHgiLCBqaWZmaWVzaXplLCBqaWZmaWVzaXplLCBqaWZmaWVzKTsKKworCQlk
ZnByaW50ayhWRlMsICJ0cnlpbmcgdG8gcmVuYW1lICVzIHRvICVzXG4iLAorCQkJIGRlbnRy
eS0+ZF9uYW1lLm5hbWUsIHNpbGx5KTsKKwkJCisJCXNkZW50cnkgPSBuZnNfc2lsbHlfbG9v
a3VwKGRlbnRyeS0+ZF9wYXJlbnQsIHNpbGx5LCBzbGVuKTsKKwkJaWYgKElTX0VSUihzZGVu
dHJ5KSkgeworCQkJcmV0dXJuIC1FSU87IC8qIEZJWE1FID8gKi8KKwkJfQkJCisJfSB3aGls
ZShzZGVudHJ5LT5kX2lub2RlICE9IE5VTEwpOyAvKiBuZWVkIG5lZ2F0aXZlIGxvb2t1cCAq
LworCisJZXJyb3IgPSBuZnNfcHJvY19yZW5hbWUoTkZTX1NFUlZFUihkaXIpLAorCQkJCU5G
U19GSChkaXIpLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCU5GU19GSChkaXIpLCBzaWxs
eSk7CisJaWYgKGVycm9yKSB7CisJCWRwdXQoc2RlbnRyeSk7CisJCXJldHVybiBlcnJvcjsK
Kwl9CisJbmZzX2ludmFsaWRhdGVfZGlyY2FjaGUoZGlyKTsKKwlkX21vdmUoZGVudHJ5LCBz
ZGVudHJ5KTsKKwlkcHV0KHNkZW50cnkpOworCWRlbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVf
TkZTRlNfUkVOQU1FRDsKKworCXJldHVybiAwOyAvKiBkb24ndCB1bmxpbmsgKi8KK30KKwor
c3RhdGljIHZvaWQgbmZzX3NpbGx5X2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7
CisJaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ORlNGU19SRU5BTUVEKSB7CisJCXN0
cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKKwkJaW50IGVy
cm9yOworCQkKKwkJZGVudHJ5LT5kX2ZsYWdzICY9IH5EQ0FDSEVfTkZTRlNfUkVOQU1FRDsK
KwkJZGZwcmludGsoVkZTLCAidHJ5aW5nIHRvIHVubGluayAlc1xuIiwgZGVudHJ5LT5kX25h
bWUubmFtZSk7CisJCWVycm9yID0gbmZzX3Byb2NfcmVtb3ZlKE5GU19TRVJWRVIoZGlyKSwK
KwkJCQkJTkZTX0ZIKGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCQlpZiAoZXJyb3Ig
PCAwKQorCQkJcHJpbnRrKCJORlMgIiBfX0ZVTkNUSU9OX18gIiBmYWlsZWQgKGVyciA9ICVk
KVxuIiwKKwkJCSAgICAgICAtZXJyb3IpOworCQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsg
LS07CisJCW5mc19pbnZhbGlkYXRlX2RpcmNhY2hlKGRpcik7CisJCWRfZGVsZXRlKGRlbnRy
eSk7CisJfQorfQorCisvKiAgV2UgZG8gc2lsbHkgcmVuYW1lLiBJbiBjYXNlIHNpbGx5cmVu
YW1lKCkgcmV0dXJucyAtRUJVU1ksIHRoZSBpbm9kZQorICogIGJlbG9uZ3MgdG8gYW4gYWN0
aXZlICIubmZzLi4uIiBmaWxlIGFuZCB3ZSByZXR1cm4gLUVCVVNZLgorICoKKyAqICBJZiBz
aWxseXJlbmFtZSgpIHJldHVybnMgMCwgd2UgZG8gbm90aGluZywgb3RoZXJ3aXNlIHdlIHVu
bGluay4KKyAqIAorICogIGlub2RlLT5pX25saW5rIGlzIHVwZGF0ZWQgaGVyZSByYXRoZXIg
dGhhbiB3YWl0aW5nIGZvciB0aGUgbmV4dAorICogIG5mc19yZWZyZXNoX2lub2RlKCkgZm9y
IGNvc21ldGljIHJlYXNvbnMgb25seS4KICAqLwogc3RhdGljIGludCBuZnNfdW5saW5rKHN0
cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CkBAIC01NDksMTIg
KzcwMiwyMSBAQAogCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBORlNfTUFYTkFNTEVOKQog
CQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWVycm9yID0gbmZzX3Byb2NfcmVtb3ZlKE5G
U19TRVJWRVIoZGlyKSwgTkZTX0ZIKGRpciksIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlm
IChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCWVycm9yID0gbmZzX3NpbGx5cmVuYW1lKGRp
ciwgZGVudHJ5KTsKKworCWlmIChlcnJvciA9PSAtRUJVU1kpIHsKKwkJcmV0dXJuIC1FQlVT
WTsKKwl9IGVsc2UgaWYgKGVycm9yIDwgMCkgeworCQllcnJvciA9IG5mc19wcm9jX3JlbW92
ZShORlNfU0VSVkVSKGRpciksCisJCQkJCU5GU19GSChkaXIpLCBkZW50cnktPmRfbmFtZS5u
YW1lKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCXJldHVybiBlcnJvcjsKKwkJCisJCWRlbnRy
eS0+ZF9pbm9kZS0+aV9ubGluayAtLTsKKwkJbmZzX2ludmFsaWRhdGVfZGlyY2FjaGUoZGly
KTsKKwkJZF9kZWxldGUoZGVudHJ5KTsKKwl9CiAKLQluZnNfaW52YWxpZGF0ZV9kaXJjYWNo
ZShkaXIpOwotCWRfZGVsZXRlKGRlbnRyeSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4OCw3
ICs3NTAsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAluZnNfaW52YWxpZGF0ZV9kaXJjYWNo
ZShkaXIpOwotCS8qICB0aGlzIGxvb2tzIF9mdW5ueV8gZG9lc24ndCBpdD8gQnV0OiBuZnNf
cHJvY19zeW1seW5rKCkKKwkvKiAgdGhpcyBsb29rcyBfZnVubnlfIGRvZXNuJ3QgaXQ/IEJ1
dDogbmZzX3Byb2Nfc3ltbGluaygpCiAJICogIG9ubHkgZmlsbHMgaW4gc2F0dHIsIG5vdCBm
YXR0ci4gVGh1cyBuZnNfZmhnZXQoKSBjYW5ub3QgYmUKIAkgKiAgY2FsbGVkLCBpdCB3b3Vs
ZCBiZSBwb2ludGxlc3MsIHdpdGhvdXQgYSB2YWxpZCBmYXR0cgogCSAqICBhcmd1bWVudC4g
T3RoZXIgcG9zc2liaWxpdHk6IGNhbGwgbmZzX3Byb2NfbG9va3VwKCkKQEAgLTYyMyw3ICs3
ODUsOCBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAluZnNfaW52YWxpZGF0ZV9kaXJjYWNoZShk
aXIpOwotCWlub2RlLT5pX2NvdW50Kys7CisJaW5vZGUtPmlfY291bnQgKys7CisJaW5vZGUt
PmlfbmxpbmsgKys7IC8qIG5vIG5lZWQgdG8gd2FpdCBmb3IgbmZzX3JlZnJlc2hfaW5vZGUo
KSAqLwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIDA7CiB9CkBA
IC02MzQsOCArNzk3LDE3IEBACiAgKiBkaWZmZXJlbnQgZmlsZSBoYW5kbGUgZm9yIHRoZSBz
YW1lIGlub2RlIGFmdGVyIGEgcmVuYW1lIChlLmcuIHdoZW4KICAqIG1vdmluZyB0byBhIGRp
ZmZlcmVudCBkaXJlY3RvcnkpLiBBIGZhaWwtc2FmZSBtZXRob2QgdG8gZG8gc28gd291bGQK
ICAqIGJlIHRvIGxvb2sgdXAgb2xkX2Rpci9vbGRfbmFtZSwgY3JlYXRlIGEgbGluayB0byBu
ZXdfZGlyL25ld19uYW1lIGFuZAotICogcmVuYW1lIHRoZSBvbGQgZmlsZSB1c2luZyB0aGUg
c2lsbHlfcmVuYW1lIHN0dWZmLiBUaGlzIHdheSwgdGhlIG9yaWdpbmFsCisgKiByZW5hbWUg
dGhlIG9sZCBmaWxlIHVzaW5nIHRoZSBzaWxseXJlbmFtZSBzdHVmZi4gVGhpcyB3YXksIHRo
ZSBvcmlnaW5hbAogICogZmlsZSBpbiBvbGRfZGlyIHdpbGwgZ28gYXdheSB3aGVuIHRoZSBs
YXN0IHByb2Nlc3MgaXB1dCgpcyB0aGUgaW5vZGUuCisgKgorICogRklYRUQuCisgKiAKKyAq
IEl0IGFjdHVhbGx5IHdvcmtzIHF1aXRlIHdlbGwuIE9uZSBuZWVkcyB0byBoYXZlIHRoZSBw
b3NzaWJpbGl0eSBmb3IKKyAqIGF0IGxlYXN0IG9uZSAiLm5mcy4uLiIgZmlsZSBpbiBlYWNo
IGRpcmVjdG9yeSB0aGUgZmlsZSBldmVyIGdldHMKKyAqIG1vdmVkIG9yIGxpbmtlZCB0byB3
aGljaCBoYXBwZW5zIGF1dG9tYWdpY2FsbHkgd2l0aCB0aGUgbmV3CisgKiBpbXBsZW1lbnRh
dGlvbiB0aGF0IG9ubHkgZGVwZW5kcyBvbiB0aGUgZGNhY2hlIHN0dWZmIGluc3RlYWQgb2YK
KyAqIHVzaW5nIHRoZSBpbm9kZSBsYXllcgorICoKICAqLwogc3RhdGljIGludCBuZnNfcmVu
YW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwK
IAkJICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVu
dHJ5KQpAQCAtNjU5LDEwICs4MzEsMjIgQEAKIAlpZiAob2xkX2RlbnRyeS0+ZF9uYW1lLmxl
biA+IE5GU19NQVhOQU1MRU4gfHwgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiA+IE5GU19NQVhO
QU1MRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JZXJyb3IgPSBuZnNfcHJvY19y
ZW5hbWUoTkZTX1NFUlZFUihvbGRfZGlyKSwKLQkJTkZTX0ZIKG9sZF9kaXIpLCBvbGRfZGVu
dHJ5LT5kX25hbWUubmFtZSwKLQkJTkZTX0ZIKG5ld19kaXIpLCBuZXdfZGVudHJ5LT5kX25h
bWUubmFtZSk7CisJaWYgKG5ld19kaXIgIT0gb2xkX2RpcikgeworCQllcnJvciA9IG5mc19z
aWxseXJlbmFtZShvbGRfZGlyLCBvbGRfZGVudHJ5KTsKIAorCQlpZiAoZXJyb3IgPT0gLUVC
VVNZKSB7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9IGVsc2UgaWYgKGVycm9yID09IDApIHsg
LyogZGlkIHNpbGx5IHJlbmFtZSBzdHVmZiAqLworCQkJZXJyb3IgPSBuZnNfbGluayhvbGRf
ZGVudHJ5LT5kX2lub2RlLAorCQkJCQkgbmV3X2RpciwgbmV3X2RlbnRyeSk7CisJCQkKKwkJ
CXJldHVybiBlcnJvcjsKKwkJfQorCQkvKiBubyBuZWVkIGZvciBzaWxseSByZW5hbWUsIHBy
b2NlZWQgYXMgdXN1YWwgKi8KKwl9CisJZXJyb3IgPSBuZnNfcHJvY19yZW5hbWUoTkZTX1NF
UlZFUihvbGRfZGlyKSwKKwkJCQlORlNfRkgob2xkX2RpciksIG9sZF9kZW50cnktPmRfbmFt
ZS5uYW1lLAorCQkJCU5GU19GSChuZXdfZGlyKSwgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUp
OwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCkBAIC03MzcsMyArOTIxLDEwIEBA
CiAJfSBlbHNlCiAJCWlub2RlLT5pX29wID0gTlVMTDsKIH0KKworLyoKKyAqIExvY2FsIHZh
cmlhYmxlczoKKyAqICB2ZXJzaW9uLWNvbnRyb2w6IHQKKyAqICBrZXB0LW5ldy12ZXJzaW9u
czogNQorICogRW5kOgorICovCi0tLSAvdXNyL3NyYy9saW51eC0yLjEuNTEvZnMvbmZzL2lu
b2RlLmMJVGh1IEF1ZyAxNCAwMjozNzo0OCAxOTk3CisrKyBsaW51eC0yLjEuNTEtbmZzLXN3
YXAvZnMvbmZzL2lub2RlLmMJU2F0IEF1ZyAyMyAyMjo1MDoyMCAxOTk3CkBAIC03NywxMCAr
NzcsNiBAQAogCWRwcmludGsoIk5GUzogcHV0X2lub2RlKCV4LyVsZClcbiIsIGlub2RlLT5p
X2RldiwgaW5vZGUtPmlfaW5vKTsKIH0KIAotLyoKLSAqIFRoaXMgc2hvdWxkIGRvIGFueSBz
aWxseS1yZW5hbWUgY2xlYW51cHMgb25jZSB3ZQotICogZ2V0IHNpbGx5LXJlbmFtaW5nIHdv
cmtpbmcgYWdhaW4uLgotICovCiBzdGF0aWMgdm9pZAogbmZzX2RlbGV0ZV9pbm9kZShzdHJ1
Y3QgaW5vZGUgKiBpbm9kZSkKIHsKQEAgLTQ1NCw2ICs0NTAsOCBAQAogaW5pdF9uZnNfZnMo
dm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJwY19yZWdpc3Rlcl9zeXNjdGwo
KTsKKwlycGNfcHJvY19pbml0KCk7CiAJcnBjX3Byb2NfcmVnaXN0ZXIoJm5mc19ycGNzdGF0
KTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmbmZzX2Zz
X3R5cGUpOwotLS0gL3Vzci9zcmMvbGludXgtMi4xLjUxL2luY2x1ZGUvbGludXgvbmZzX2Zz
X2kuaAlNb24gQXVnIDE4IDAwOjA5OjQ0IDE5OTcKKysrIGxpbnV4LTIuMS41MS1uZnMtc3dh
cC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgJU2F0IEF1ZyAyMyAwMTowODo1MSAxOTk3CkBA
IC00NywxMyArNDcsNiBAQAogCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lbzsKIAogCS8qCi0J
ICogVGhpcyBpcyB0byBzdXBwb3J0IHRoZSBjbGFuZGVzdGluZSByZW5hbWUgb24gdW5saW5r
LgotCSAqIEluc3RlYWQgb2YgdGhlIGRpcmVjdG9yeSBpbm9kZSwgd2UgbWlnaHQgYXMgd2Vs
bCBrZWVwCi0JICogaXRzIE5GUyBGSCwgYnV0IHRoYXQgcmVxdWlyZXMgYSBrbWFsbG9jLgot
CSAqLwotCXN0cnVjdCBpbm9kZSAqCQlzaWxseV9pbm9kZTsKLQotCS8qCiAJICogVGhpcyBp
cyB0aGUgbGlzdCBvZiBkaXJ0eSB1bndyaXR0ZW4gcGFnZXMuCiAJICogTkZTdjMgd2lsbCB3
YW50IHRvIGFkZCBhIGxpc3QgZm9yIHdyaXR0ZW4gYnV0IHVuY29tbWl0dGVkCiAJICogcGFn
ZXMuCi0tLSAvdXNyL3NyYy9saW51eC0yLjEuNTEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAlU
aHUgQXVnIDIxIDE5OjE5OjMzIDE5OTcKKysrIGxpbnV4LTIuMS41MS1uZnMtc3dhcC9pbmNs
dWRlL2xpbnV4L2RjYWNoZS5oCVNhdCBBdWcgMjMgMjA6NTI6MDQgMTk5NwpAQCAtNTcsNiAr
NTcsNyBAQAogCWludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRlbnRyeSAqKTsKIAlpbnQg
KCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosc3RydWN0IHFzdHIgKik7CiAJaW50ICgqZF9j
b21wYXJlKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICop
OworCXZvaWQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKIH07CiAKIC8qIHRoZSBk
ZW50cnkgcGFyYW1ldGVyIHBhc3NlZCB0byBkX2hhc2ggYW5kIGRfY29tcGFyZSBpcyB0aGUg
cGFyZW50CkBAIC03MCw2ICs3MSwxMCBAQAogCiAvKiBkX2ZsYWdzIGVudHJpZXMgKi8KICNk
ZWZpbmUgRENBQ0hFX0FVVE9GU19QRU5ESU5HIDB4MDAwMSAgICAvKiBhdXRvZnM6ICJ1bmRl
ciBjb25zdHJ1Y3Rpb24iICovCisjZGVmaW5lIERDQUNIRV9ORlNGU19SRU5BTUVEICAweDAw
MDIgICAgLyogdGhpcyBkZW50cnkgaGFzIGJlZW4gInNpbGx5CisJCQkJCSAqIHJlbmFtZWQi
IGFuZCBoYXMgdG8gYmUKKwkJCQkJICogZGVsZXRlZCBvbiB0aGUgbGFzdCBkcHV0KCkKKwkJ
CQkJICovCiAKIC8qCiAgKiBkX2Ryb3AoKSB1bmhhc2hlcyB0aGUgZW50cnkgZnJvbSB0aGUg
cGFyZW50Cgo=

--Multipart_Sat_Aug_23_23:04:41_1997-1
Content-Type: text/plain; charset=US-ASCII

Claus-Justus Heine
claus@momo.math.rwth-aachen.de
http://samuel.math.rwth-aachen.de/~LBFM/claus

PGP Public Key:
http://samuel.math.rwth-aachen.de/~LBFM/claus/claus-public-key.asc

Ftape - the Linux Floppy Tape Project
WWW : http://samuel.math.rwth-aachen.de/~LBFM/claus/ftape
Mailing-list: linux-tape@vger.rutgers.edu

--Multipart_Sat_Aug_23_23:04:41_1997-1--

--pgp-sign-Multipart_Sat_Aug_23_23:04:41_1997-1
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit

-----BEGIN PGP MESSAGE-----
Version: 2.6.3i
Comment: Processed by Mailcrypt 3.4, an Emacs/PGP interface

iQCVAwUBM/9QjNo/s1zPE7AdAQGdmgP9FSNvRdGk0cNyIih2k/KrU6RvNik2hdo7
Fmdj6O/XDMGW2CqrvRGDx6uH4+gqHyK/+n+izbA6xYBPDnp1Eq2dr1TpuYqbbSHt
33RJaHn3s3eVkwbBMLgKbh8i+YdEVx1DQutelRGKbCvC82+13oeeP1M3z86qHr03
sCPOSDWK3k0=
=9mxT
-----END PGP MESSAGE-----

--pgp-sign-Multipart_Sat_Aug_23_23:04:41_1997-1--