/* Private functions. */
static int HgfsPackOpenRequest(struct inode *inode,
struct file *file,
- HgfsOp opUsed,
+ HgfsOp opUsed,
HgfsReq *req);
static int HgfsUnpackOpenReply(HgfsReq *req,
HgfsOp opUsed,
static int
HgfsPackOpenRequest(struct inode *inode, // IN: Inode of the file to open
struct file *file, // IN: File pointer for this open
- HgfsOp opUsed, // IN: Op to use
+ HgfsOp opUsed, // IN: Op to use
HgfsReq *req) // IN/OUT: Packet to write into
{
char *name;
}
requestV3->flags = result;
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: mode file %o inode %o -> user %o\n",
+ __func__, file->f_mode, inode->i_mode, (inode->i_mode & S_IRWXU) >> 6));
/* Set permissions. */
requestV3->specialPerms = (inode->i_mode & (S_ISUID | S_ISGID | S_ISVTX))
>> 9;
iinfo = INODE_GET_II_P(inode);
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: open file(%s/%s)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name));
+
req = HgfsGetNewRequest();
if (!req) {
LOG(4, (KERN_DEBUG "VMware hgfs: HgfsOpen: out of memory while "
loff_t offset) // IN: Offset at which to read
{
int result;
+ struct dentry *readDentry;
ASSERT(iocb);
ASSERT(iocb->ki_filp);
ASSERT(iocb->ki_filp->f_dentry);
ASSERT(iov);
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsAioRead: was called\n"));
+ readDentry = iocb->ki_filp->f_dentry;
- result = HgfsRevalidate(iocb->ki_filp->f_dentry);
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: (%s/%s, %lu@%lu)\n",
+ __func__, readDentry->d_parent->d_name.name,
+ readDentry->d_name.name,
+ (unsigned long) iov_length(iov, numSegs), (unsigned long) offset));
+
+ result = HgfsRevalidate(readDentry);
if (result) {
LOG(4, (KERN_DEBUG "VMware hgfs: HgfsAioRead: invalid dentry\n"));
goto out;
loff_t offset) // IN: Offset at which to read
{
int result;
+ struct dentry *writeDentry;
ASSERT(iocb);
ASSERT(iocb->ki_filp);
ASSERT(iocb->ki_filp->f_dentry);
ASSERT(iov);
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsAioWrite: was called\n"));
+ writeDentry = iocb->ki_filp->f_dentry;
+
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: (%s/%s, %lu@%Ld)\n",
+ __func__, writeDentry->d_parent->d_name.name,
+ writeDentry->d_name.name,
+ (unsigned long) iov_length(iov, numSegs), (long long) offset));
- result = HgfsRevalidate(iocb->ki_filp->f_dentry);
+ result = HgfsRevalidate(writeDentry);
if (result) {
LOG(4, (KERN_DEBUG "VMware hgfs: HgfsAioWrite: invalid dentry\n"));
goto out;
ASSERT(buf);
ASSERT(offset);
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsRead: read %Zu bytes from fh %u "
- "at offset %Lu\n", count, FILE_GET_FI_P(file)->handle, *offset));
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: (%s/%s,%Zu@%lld)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name, count, (long long) *offset));
result = HgfsRevalidate(file->f_dentry);
if (result) {
ASSERT(buf);
ASSERT(offset);
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsWrite: write %Zu bytes to fh %u "
- "at offset %Lu\n", count, FILE_GET_FI_P(file)->handle, *offset));
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: (%s/%s,%Zu@%lld)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name, count, (long long) *offset));
result = HgfsRevalidate(file->f_dentry);
if (result) {
*/
static int
-HgfsFsync(struct file *file, // IN: File we operate on
+HgfsFsync(struct file *file, // IN: File we operate on
#if defined VMW_FSYNC_OLD
struct dentry *dentry, // IN: Dentry for this file
#elif defined VMW_FSYNC_31
loff_t start, // IN: start of range to sync
loff_t end, // IN: end of range to sync
#endif
- int datasync) // IN: fdatasync or fsync
+ int datasync) // IN: fdatasync or fsync
{
LOG(6, (KERN_DEBUG "VMware hgfs: HgfsFsync: was called\n"));
*/
static int
-HgfsMmap(struct file *file, // IN: File we operate on
- struct vm_area_struct *vma) // IN/OUT: VM area information
+HgfsMmap(struct file *file, // IN: File we operate on
+ struct vm_area_struct *vma) // IN/OUT: VM area information
{
int result;
memcpy(*fileName, name, length);
CPNameLite_ConvertFrom(*fileName, length, '/');
(*fileName)[length] = '\0';
+ LOG(4, (KERN_DEBUG "VMware hgfs: %s: symlink name %s\n",
+ __func__, *fileName));
} else {
*fileName = NULL;
}
result = HgfsSendRequest(req);
if (result == 0) {
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsPrivateGetattr: got reply\n"));
replyStatus = HgfsReplyStatus(req);
result = HgfsStatusConvertToLinux(replyStatus);
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: reply status %d -> %d\n",
+ __func__, replyStatus, result));
/*
* If the getattr succeeded on the server, copy the stats
goto out;
}
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsFollowlink: calling "
- "HgfsPrivateGetattr\n"));
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: calling HgfsPrivateGetattr %s\n",
+ __func__, dentry->d_name.name));
error = HgfsPrivateGetattr(dentry, &attr, &fileName);
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: HgfsPrivateGetattr %s ret %d\n",
+ __func__, dentry->d_name.name, error));
if (!error) {
/* Let's make sure we got called on a symlink. */
"on something that wasn't a symlink\n"));
error = -EINVAL;
} else {
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsFollowlink: calling "
- "vfs_follow_link\n"));
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: calling vfs_follow_link %s\n",
+ __func__, fileName));
error = vfs_follow_link(nd, fileName);
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: vfs_follow_link %s ret %d\n",
+ __func__, fileName, error));
}
kfree(fileName);
}
return -EINVAL;
}
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsReadlink: calling "
- "HgfsPrivateGetattr\n"));
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: calling HgfsPrivateGetattr %s\n",
+ __func__, dentry->d_name.name));
error = HgfsPrivateGetattr(dentry, &attr, &fileName);
if (!error) {
"on something that wasn't a symlink\n"));
error = -EINVAL;
} else {
- LOG(6, (KERN_DEBUG "VMware hgfs: HgfsReadlink: calling "
- "vfs_readlink\n"));
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: calling vfs_readlink %s\n",
+ __func__, fileName));
error = vfs_readlink(dentry, buffer, buflen, fileName);
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: vfs_readlink %s ret %dn",
+ __func__, fileName, error));
}
kfree(fileName);
}
ASSERT(page->mapping->host);
inode = page->mapping->host;
+ LOG(4, (KERN_WARNING "VMware hgfs: %s: start writes at %Lu\n",
+ __func__, curOffset));
/*
* Call HgfsDoWrite repeatedly until either
* - HgfsDoWrite returns an error, or
dataPacket[0].len = nextCount;
result = HgfsDoWrite(handle, dataPacket, 1, curOffset);
if (result < 0) {
- LOG(4, (KERN_WARNING "VMware hgfs: HgfsDoWritepage: write error %d\n",
- result));
+ LOG(4, (KERN_WARNING "VMware hgfs: %s: write error %d\n",
+ __func__, result));
goto out;
}
remainingCount -= result;
} while ((result > 0) && (remainingCount > 0));
result = 0;
+ LOG(4, (KERN_WARNING "VMware hgfs: %s: end writes at %Lu rem %zu\n",
+ __func__, curOffset, remainingCount));
out:
return result;
offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
currentFileSize = compat_i_size_read(page->mapping->host);
+ LOG(6, (KERN_DEBUG "VMware hgfs: %s: file size %Lu off %Lu: %u to %u\n", __func__,
+ currentFileSize, offset, pageFrom, pageTo));
/*
* If we are doing a partial write into a new page (beyond end of
* file), then intialize it. This allows other writes to this page
unsigned pageTo = pos + len;
struct page *page;
+ LOG(6, (KERN_WARNING "VMware hgfs: %s: (%s/%s(%ld), %u@%lld)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name,
+ mapping->host->i_ino, len, (long long) pos));
+
page = compat_grab_cache_page_write_begin(mapping, index, flags);
if (page == NULL) {
return -ENOMEM;
currentFileSize = compat_i_size_read(inode);
offset = (loff_t)page->index << PAGE_CACHE_SHIFT;
+ LOG(6, (KERN_WARNING "VMware hgfs: %s: (%s/%s(%ld), from %u to %u@%lld => %u)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name,
+ page->mapping->host->i_ino, pageFrom, pageTo, (long long) writeTo, copied));
+
if (writeTo > currentFileSize) {
compat_i_size_write(inode, writeTo);
}
ASSERT(mapping);
ASSERT(page);
+
+ LOG(6, (KERN_WARNING "VMware hgfs: %s: (%s/%s(%ld), %u@%lld,=>%u)\n",
+ __func__, file->f_dentry->d_parent->d_name.name,
+ file->f_dentry->d_name.name,
+ mapping->host->i_ino, len, (long long) pos, copied));
+
ret = HgfsDoWriteEnd(file, page, pageFrom, pageTo, writeTo, copied);
if (ret == 0) {
ret = copied;