Commit a3252e01 authored by Konstantin Baev's avatar Konstantin Baev

4.2.1-alt1.testing2

Updated sources 2.6.25 - 2.6.28 - Fixed F_GETLK problem with mount option forcemand - Some bugxixes near F_GETLK problem
parent 575cbfd2
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
Name: etercifs Name: etercifs
Version: 4.2.1 Version: 4.2.1
Release: alt1.testing1 Release: alt1.testing2
Summary: Advanced Common Internet File System for Linux with Etersoft extension Summary: Advanced Common Internet File System for Linux with Etersoft extension
...@@ -118,6 +118,10 @@ cp %SOURCE28 %buildroot/%etercifs_src/%src_package_name-2.6.28-%src_2_6_28_versi ...@@ -118,6 +118,10 @@ cp %SOURCE28 %buildroot/%etercifs_src/%src_package_name-2.6.28-%src_2_6_28_versi
%doc README.ETER AUTHORS CHANGES README TODO %doc README.ETER AUTHORS CHANGES README TODO
%changelog %changelog
* Mon Mar 30 2009 Konstantin Baev <kipruss@altlinux.org> 4.2.1-alt1.testing2
- Fixed F_GETLK problem with mount option forcemand
- Some bugxixes near F_GETLK problem
* Thu Mar 26 2009 Konstantin Baev <kipruss@altlinux.org> 4.2.1-alt1.testing1 * Thu Mar 26 2009 Konstantin Baev <kipruss@altlinux.org> 4.2.1-alt1.testing1
- Fix bug Eter#3660 (F_GETLK problem connected with wrong returning file_lock structure) - Fix bug Eter#3660 (F_GETLK problem connected with wrong returning file_lock structure)
- Refactoring code, which solved kmem_cache_destroy problem - Refactoring code, which solved kmem_cache_destroy problem
......
...@@ -1862,16 +1862,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon, ...@@ -1862,16 +1862,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
} }
parm_data = (struct cifs_posix_lock *) parm_data = (struct cifs_posix_lock *)
((char *)&pSMBr->hdr.Protocol + data_offset); ((char *)&pSMBr->hdr.Protocol + data_offset);
if (parm_data->lock_type == cpu_to_le16(CIFS_UNLCK)) if (parm_data->lock_type == __constant_cpu_to_le16(CIFS_UNLCK))
pLockData->fl_type = F_UNLCK; pLockData->fl_type = F_UNLCK;
else { else {
if (parm_data->lock_type == cpu_to_le16(CIFS_RDLCK)) if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_RDLCK))
pLockData->fl_type = F_RDLCK; pLockData->fl_type = F_RDLCK;
else if (parm_data->lock_type == cpu_to_le16(CIFS_WRLCK)) else if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_WRLCK))
pLockData->fl_type = F_WRLCK; pLockData->fl_type = F_WRLCK;
pLockData->fl_start = parm_data->start; pLockData->fl_start = parm_data->start;
pLockData->fl_end = parm_data->start + parm_data->length - 1; pLockData->fl_end = parm_data->start +
parm_data->length - 1;
pLockData->fl_pid = parm_data->pid; pLockData->fl_pid = parm_data->pid;
} }
} }
......
...@@ -748,8 +748,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock) ...@@ -748,8 +748,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
} else { } else {
/* if rc == ERR_SHARING_VIOLATION ? */ /* if rc == ERR_SHARING_VIOLATION ? */
rc = 0; /* do not change lock type to unlock rc = 0;
since range in use */
if (lockType & LOCKING_ANDX_SHARED_LOCK) {
pfLock->fl_type = F_WRLCK;
} else {
rc = CIFSSMBLock(xid, pTcon, netfid, length,
pfLock->fl_start, 0, 1,
lockType | LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
if (rc == 0) {
rc = CIFSSMBLock(xid, pTcon, netfid,
length, pfLock->fl_start, 1, 0,
lockType |
LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
pfLock->fl_type = F_RDLCK;
if (rc != 0)
cERROR(1, ("Error unlocking "
"previously locked range %d "
"during test of lock", rc));
rc = 0;
} else {
pfLock->fl_type = F_WRLCK;
rc = 0;
}
}
} }
FreeXid(xid); FreeXid(xid);
......
...@@ -1902,16 +1902,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon, ...@@ -1902,16 +1902,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
} }
parm_data = (struct cifs_posix_lock *) parm_data = (struct cifs_posix_lock *)
((char *)&pSMBr->hdr.Protocol + data_offset); ((char *)&pSMBr->hdr.Protocol + data_offset);
if (parm_data->lock_type == cpu_to_le16(CIFS_UNLCK)) if (parm_data->lock_type == __constant_cpu_to_le16(CIFS_UNLCK))
pLockData->fl_type = F_UNLCK; pLockData->fl_type = F_UNLCK;
else { else {
if (parm_data->lock_type == cpu_to_le16(CIFS_RDLCK)) if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_RDLCK))
pLockData->fl_type = F_RDLCK; pLockData->fl_type = F_RDLCK;
else if (parm_data->lock_type == cpu_to_le16(CIFS_WRLCK)) else if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_WRLCK))
pLockData->fl_type = F_WRLCK; pLockData->fl_type = F_WRLCK;
pLockData->fl_start = parm_data->start; pLockData->fl_start = parm_data->start;
pLockData->fl_end = parm_data->start + parm_data->length - 1; pLockData->fl_end = parm_data->start +
parm_data->length - 1;
pLockData->fl_pid = parm_data->pid; pLockData->fl_pid = parm_data->pid;
} }
} }
......
...@@ -745,8 +745,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock) ...@@ -745,8 +745,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
} else { } else {
/* if rc == ERR_SHARING_VIOLATION ? */ /* if rc == ERR_SHARING_VIOLATION ? */
rc = 0; /* do not change lock type to unlock rc = 0;
since range in use */
if (lockType & LOCKING_ANDX_SHARED_LOCK) {
pfLock->fl_type = F_WRLCK;
} else {
rc = CIFSSMBLock(xid, pTcon, netfid, length,
pfLock->fl_start, 0, 1,
lockType | LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
if (rc == 0) {
rc = CIFSSMBLock(xid, pTcon, netfid,
length, pfLock->fl_start, 1, 0,
lockType |
LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
pfLock->fl_type = F_RDLCK;
if (rc != 0)
cERROR(1, ("Error unlocking "
"previously locked range %d "
"during test of lock", rc));
rc = 0;
} else {
pfLock->fl_type = F_WRLCK;
rc = 0;
}
}
} }
FreeXid(xid); FreeXid(xid);
......
...@@ -1877,16 +1877,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon, ...@@ -1877,16 +1877,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
} }
parm_data = (struct cifs_posix_lock *) parm_data = (struct cifs_posix_lock *)
((char *)&pSMBr->hdr.Protocol + data_offset); ((char *)&pSMBr->hdr.Protocol + data_offset);
if (parm_data->lock_type == cpu_to_le16(CIFS_UNLCK)) if (parm_data->lock_type == __constant_cpu_to_le16(CIFS_UNLCK))
pLockData->fl_type = F_UNLCK; pLockData->fl_type = F_UNLCK;
else { else {
if (parm_data->lock_type == cpu_to_le16(CIFS_RDLCK)) if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_RDLCK))
pLockData->fl_type = F_RDLCK; pLockData->fl_type = F_RDLCK;
else if (parm_data->lock_type == cpu_to_le16(CIFS_WRLCK)) else if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_WRLCK))
pLockData->fl_type = F_WRLCK; pLockData->fl_type = F_WRLCK;
pLockData->fl_start = parm_data->start; pLockData->fl_start = parm_data->start;
pLockData->fl_end = parm_data->start + parm_data->length - 1; pLockData->fl_end = parm_data->start +
parm_data->length - 1;
pLockData->fl_pid = parm_data->pid; pLockData->fl_pid = parm_data->pid;
} }
} }
......
...@@ -746,8 +746,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock) ...@@ -746,8 +746,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
} else { } else {
/* if rc == ERR_SHARING_VIOLATION ? */ /* if rc == ERR_SHARING_VIOLATION ? */
rc = 0; /* do not change lock type to unlock rc = 0;
since range in use */
if (lockType & LOCKING_ANDX_SHARED_LOCK) {
pfLock->fl_type = F_WRLCK;
} else {
rc = CIFSSMBLock(xid, pTcon, netfid, length,
pfLock->fl_start, 0, 1,
lockType | LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
if (rc == 0) {
rc = CIFSSMBLock(xid, pTcon, netfid,
length, pfLock->fl_start, 1, 0,
lockType |
LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
pfLock->fl_type = F_RDLCK;
if (rc != 0)
cERROR(1, ("Error unlocking "
"previously locked range %d "
"during test of lock", rc));
rc = 0;
} else {
pfLock->fl_type = F_WRLCK;
rc = 0;
}
}
} }
FreeXid(xid); FreeXid(xid);
......
...@@ -1879,16 +1879,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon, ...@@ -1879,16 +1879,19 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
} }
parm_data = (struct cifs_posix_lock *) parm_data = (struct cifs_posix_lock *)
((char *)&pSMBr->hdr.Protocol + data_offset); ((char *)&pSMBr->hdr.Protocol + data_offset);
if (parm_data->lock_type == cpu_to_le16(CIFS_UNLCK)) if (parm_data->lock_type == __constant_cpu_to_le16(CIFS_UNLCK))
pLockData->fl_type = F_UNLCK; pLockData->fl_type = F_UNLCK;
else { else {
if (parm_data->lock_type == cpu_to_le16(CIFS_RDLCK)) if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_RDLCK))
pLockData->fl_type = F_RDLCK; pLockData->fl_type = F_RDLCK;
else if (parm_data->lock_type == cpu_to_le16(CIFS_WRLCK)) else if (parm_data->lock_type ==
__constant_cpu_to_le16(CIFS_WRLCK))
pLockData->fl_type = F_WRLCK; pLockData->fl_type = F_WRLCK;
pLockData->fl_start = parm_data->start; pLockData->fl_start = parm_data->start;
pLockData->fl_end = parm_data->start + parm_data->length - 1; pLockData->fl_end = parm_data->start +
parm_data->length - 1;
pLockData->fl_pid = parm_data->pid; pLockData->fl_pid = parm_data->pid;
} }
} }
......
...@@ -753,8 +753,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock) ...@@ -753,8 +753,32 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
} else { } else {
/* if rc == ERR_SHARING_VIOLATION ? */ /* if rc == ERR_SHARING_VIOLATION ? */
rc = 0; /* do not change lock type to unlock rc = 0;
since range in use */
if (lockType & LOCKING_ANDX_SHARED_LOCK) {
pfLock->fl_type = F_WRLCK;
} else {
rc = CIFSSMBLock(xid, pTcon, netfid, length,
pfLock->fl_start, 0, 1,
lockType | LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
if (rc == 0) {
rc = CIFSSMBLock(xid, pTcon, netfid,
length, pfLock->fl_start, 1, 0,
lockType |
LOCKING_ANDX_SHARED_LOCK,
0 /* wait flag */ );
pfLock->fl_type = F_RDLCK;
if (rc != 0)
cERROR(1, ("Error unlocking "
"previously locked range %d "
"during test of lock", rc));
rc = 0;
} else {
pfLock->fl_type = F_WRLCK;
rc = 0;
}
}
} }
FreeXid(xid); FreeXid(xid);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment