Re: Compatibility issue with 2.2.19pre7

Trond Myklebust (trond.myklebust@fys.uio.no)
Thu, 11 Jan 2001 19:30:49 +0100 (CET)


>>>>> " " == Andrea Arcangeli <andrea@suse.de> writes:

> On Thu, Jan 11, 2001 at 07:22:03PM +0100, Trond Myklebust
> wrote:
>> [..] Are there any alignment requirements on them?

> On some arch int can be read only at a sizeof(int) byte aligned
> address (details in my example in reply to Russell).

OK. In that case my patch, would just be amended to eliminate the
redundant comparison as is the case below.

Cheers,
Trond

diff -u --recursive --new-file linux-2.2.18/fs/lockd/svcsubs.c linux-2.2.18-fix_ppc/fs/lockd/svcsubs.c
--- linux-2.2.18/fs/lockd/svcsubs.c Mon Dec 11 01:49:44 2000
+++ linux-2.2.18-fix_ppc/fs/lockd/svcsubs.c Thu Jan 11 19:00:11 2001
@@ -49,34 +49,36 @@
nlm_lookup_file(struct svc_rqst *rqstp, struct nlm_file **result,
struct nfs_fh *f)
{
- struct knfs_fh *fh = (struct knfs_fh *) f->data;
+ struct knfs_fh fh;
struct nlm_file *file;
unsigned int hash;
u32 nfserr;

+ /* Copy filehandle to avoid pointer alignment issues */
+ memcpy(&fh, f->data, sizeof(fh));
+
dprintk("lockd: nlm_file_lookup(%s/%u)\n",
- kdevname(u32_to_kdev_t(fh->fh_dev)), fh->fh_ino);
+ kdevname(u32_to_kdev_t(fh.fh_dev)), fh.fh_ino);

- hash = file_hash(u32_to_kdev_t(fh->fh_dev), u32_to_ino_t(fh->fh_ino));
+ hash = file_hash(u32_to_kdev_t(fh.fh_dev), u32_to_ino_t(fh.fh_ino));

/* Lock file table */
down(&nlm_file_sema);

for (file = nlm_files[hash]; file; file = file->f_next) {
- if (file->f_handle.fh_dcookie == fh->fh_dcookie &&
- !memcmp(&file->f_handle, fh, sizeof(*fh)))
+ if (!memcmp(&file->f_handle, &fh, sizeof(fh)))
goto found;
}

dprintk("lockd: creating file for %s/%u\n",
- kdevname(u32_to_kdev_t(fh->fh_dev)), fh->fh_ino);
+ kdevname(u32_to_kdev_t(fh.fh_dev)), fh.fh_ino);
nfserr = nlm4_lck_denied_nolocks;
file = (struct nlm_file *) kmalloc(sizeof(*file), GFP_KERNEL);
if (!file)
goto out_unlock;

memset(file, 0, sizeof(*file));
- file->f_handle = *fh;
+ memcpy(&file->f_handle, &fh, sizeof(file->f_handle));
file->f_sema = MUTEX;

/* Open the file. Note that this must not sleep for too long, else
@@ -85,7 +87,7 @@
* We have to make sure we have the right credential to open
* the file.
*/
- if ((nfserr = nlmsvc_ops->fopen(rqstp, fh, &file->f_file)) != 0) {
+ if ((nfserr = nlmsvc_ops->fopen(rqstp, &fh, &file->f_file)) != 0) {
dprintk("lockd: open failed (nfserr %d)\n", ntohl(nfserr));
goto out_free;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/